如何解决Python如何在类方法之间共享变量,实例属性和类属性之间有什么区别
例如:
class MyClass:
def __init__(self,Attr1):
self.Attr1 = Attr1
def method1(self):
self.var1 = [some codes involves Attr1]
def method2(self):
self.var2 = [some codes involves var1 from method1]
可行吗?但是函数中的变量是函数的局部变量。我不知道是否可以从var1
致电method1
。
我能想到的另一种方法是在self.var1
中设置__init__
,这是一个类属性,因此我可以在method2
中对其进行调用。但是然后我不想有一个很大的__init__
。
我还阅读了有关类属性和实例属性的东西-两者之间有什么区别?
解决方法
实例属性
该类中以self.
开头的变量属于特定的单个类实例(而不是特定的方法),因此非常可行。
您可以在类构造函数中对其进行初始化:
class A:
def __init__(self):
self.instance_attribute = 'instance attribute'
您可以分别更改每个实例的值:
a1 = A()
a2 = A()
a2.instance_attribute = 'sabich'
# 'instance attribute' (unchanged)
print(a1.instance_attribute)
# 'sabich'
print(a2.instance_attribute)
类属性
class A:
a = "class attribute"
类属性是所有类实例共有的,并由该类拥有。
可以通过类名称访问它们:
# 'class attribute'
print(A.a)
或通过特定实例:
a1 = A()
# 'class attribute'
print(a1.a)
,
您已经在使用self.
,所以var1的范围是类而不是方法。
因此,如果将var1称为self.var1
并且首先调用method1
,则可以在任何其他类方法中使用var1。
这可行吗?
是的。
But the variables in functions are local to the function.
不是,它们是实例属性,也就是说,它们是类的某些实例的属性。
我不知道我是否可以从
var1
呼叫method1
可以,但是您需要创建一个实例,然后为该实例调用方法。
我能想到的另一种方法是在其中设置
self.var1
__init__
是一个类属性,因此我可以将其调用method2
最好在构造函数中进行设置,因为这样就不必担心method1
是否被调用。但是您可以毫无问题地在method2
中使用它。
但是我不想有一个很大的
__init__
您可以创建辅助方法并调用它们。
I also read something about a class attributes and an instance attributes — what's the difference between the two?
类属性是类的属性,即它们是整个实例集的属性。实例属性是属性的实例。考虑一下stackoverflow.com用户。每个用户都有一个用户名,即实例级别。但是,用户数是整个用户的属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。