我想知道哪一个是通过自我或类名
来访问类中类变量的最佳方式我在某处读过self只用于访问实例变量。但是当我尝试使用下面的代码时,它是同样的事情之一。这是否意味着我们可以使用它们中的任何一个?
class MyClass:
cls_var = 0 # class variable
def increment(self, incre):
self.cls_var += incre
MyClass.cls_var += incre
def print_var(self):
print(self.cls_var) #Choice 1
print(MyClass.cls_var) # Choice 2
obj1 = MyClass()
obj2 = MyClass()
obj1.increment(5)
obj2.increment(10)
obj1.print_var() #prints 5, 15
obj2.print_var() # prints 15, 15
答案 0 :(得分:1)
您应该仅通过类名访问类变量,因为该变量在所有类之间共享。因此,为了避免混淆,应该只通过类的名称访问类变量;否则可能导致surprising errors(见第二个片段)。
答案 1 :(得分:0)
在我看来,你应该使用“Choice 2”,因为所有实例都共享类变量“cls_var”。所以,如果你这样做
ob1.increment(5)
同样“ob2.cls_var”会增加,但是Python的Zen显然比隐式更好!
MyClass.increment(5)
请参阅:https://docs.python.org/2/tutorial/classes.html#class-and-instance-variables。