在Python中访问类中的类成员的最佳方法

时间:2018-01-27 13:12:12

标签: python python-3.x oop

我想知道哪一个是通过自我类名

来访问类中类变量的最佳方式

我在某处读过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

2 个答案:

答案 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