遇到一个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
的引用
这是因为
otherVar
是class
的属性,而您在__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
相关问题 更多 >
编程相关推荐