3 回答

TA贡献1818条经验 获得超11个赞
请注意,您看到的部分行为是由somedataa 引起的dict,而不是像a这样的简单数据类型bool。
例如,请参见以下示例,该示例的行为有所不同(尽管非常相似):
class the_base_class:
somedata = False
class subclassthing(the_base_class):
def __init__(self):
print self.somedata
>>> first = subclassthing()
False
>>> first.somedata = True
>>> print first.somedata
True
>>> second = subclassthing()
False
>>> print first.somedata
True
>>> del first
>>> del second
>>> third = subclassthing()
False
该示例的行为与问题中给出的示例不同的原因是,在此示例中first.somedata它被赋予了新值(object True),而在第一个示例中,由first.somedata(以及其他子类实例)引用的dict对象也被修改。
有关进一步的说明,请参见Torsten Marek对这个答案的评论。

TA贡献1794条经验 获得超8个赞
我认为最简单的理解方法(以便您可以预测行为)是认识到您somedata
是该类的一个属性,而不是该类的实例(如果以这种方式定义)。
实际上somedata
在任何时候都只有一个,因为在您的示例中,您没有分配给该名称,而是使用它来查找字典,然后为其分配一个项(键,值)。这是Python解释器如何工作的结果,一开始可能会造成混淆。
添加回答
举报