Python 3.4.0a1
视窗8.1
创建的类:
class Bank(object):
bankrupt = False
在空闲状态下输入命令__main__
结果如下:
>>> a = Bank()
>>> b = Bank()
>>> a.bankrupt
False
>>> b.bankrupt
False
>>> b.bankrupt = True
>>> b.bankrupt
True
>>> a.bankrupt
False
预期输出:
当我更改 b.bankrupt 时,我预计 a.bankrupt 会更改为 True,因为变量bankrupt 是为整个类定义的,而不是为单个实例定义的(带有self.bankrupt
)为什么这没有发生?
您而是为实例分配了一个新属性。要更改类属性,请直接分配给该类。
当查找实例上的属性时,查找“先到”类,然后再到基类。这就是找到所有类属性(包括方法)的方式。
但当指派,这直接发生在实例上。否则,您永远无法分配每个实例的值,您只能分配回类。分配给a.bankrupt
or b.bankrupt
将会向实例添加一个属性(如果它一开始就不存在)。对于Python来说,使用和使用没有区别self.bankrupt = True
在方法中,或使用a.bankrupt = True
从“外部”分配给属性。
只需直接分配给类属性(从方法或从“外部”):
Bank.bankrupt = True
请注意,相同的读取失败、写入分配规则适用于基类;如果直接在类上找不到该属性,则查找类上的属性会查找基类,但在类上设置属性会直接执行此操作,并且不会影响基类上的属性。
有关具体细节,请参阅定制课程 and 类实例的部分Python数据模型.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)