Python类成员变量初始化?

2024-04-25 00:53:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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的引用


Tags: testself示例initvardef错误prints
2条回答

这是因为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

有关更深入的解释,请查看here

相关问题 更多 >