Python类成员变量初始化?

Python Class member variables initilialization?

本问题已经有最佳答案,请猛点这里访问。

遇到一个Python类,我发现很难理解它是如何工作的以及为什么工作的。类的一个简化示例是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Test:
  def __init__(self):
    self.var = 1

  otherVar = 2

  def myPrinter(self):
    print self.__dict__  # Prints {'var': 1}
    print self.var
    print self.otherVar  # Doubt !!
    print self.__dict__  # Prints {'var': 1}

ob = Test()
ob.myPrinter()

我怀疑self.otherVar调用没有抛出错误,而self.__dict__没有显示对otherVar的引用。


这是因为otherVarclass的属性,而在__init__中设置的var是实例的属性。

otherVar对实例可见,因为python首先尝试获取实例属性值,如果实例没有该属性值,那么它会检查其类属性。如果您用不同的值在两个函数中定义一个var,那么起初事情可能会变得混乱。

好吧,你知道吗,比较一下,类就像一个蓝图,实例是按照它构建的,对吗?因此,var是在创建实例时添加的一个额外项。

如果你想看otherVar,就去看Test.__dict__。它不会向您显示var,而是显示所有类属性。玩一点,随着时间的推移,你会习惯的。类属性可能很复杂,但非常有用。


otherVar是一个类成员,而不是实例成员,所以在__dict__中没有显示。

出现在self.__class__.__dict__中。(这种方法在Python2.x中不起作用)

顺便说一下,otherVar成员值在所有实例中共享,也可以从type对象:Test.otherVar访问。

示例:https://trinket.io/python3/d245351e58

如需更深入的解释,请查看此处