這段代碼應該打印什麼?Python瘋狂易變
class Parent():
class Meta(object):
classattr = "Hello"
class Child(Parent):
pass
Child.Meta.classattr = "world"
ch = Child()
pr = Parent()
ch.Meta.classattr = "Oppa"
print Parent.Meta.classattr
print Child.Meta.classattr
print pr.Meta.classattr
print ch.Meta.classattr
我希望以下內容:
Hello
world
Hello
Oppa
,但得到
Oppa
Oppa
Oppa
Oppa
所以......我可以通過修改子類的實例修改父類(不是實例!)。這是正常的嗎?
通過運行'ch.Meta是pr.Meta'可以很容易驗證。 –
好了,但我已經tryed使用deepcopy的,並沒有什麼改變: '進口副本 父類(對象): 類IntClass: intclassattr = 「你好」] 兒童= copy.deepcopy(家長) Child.IntClass.intclassattr.append( 「世界」) 打印Parent.IntClass.intclassattr' 結果是 '[ '你好', '世界']' 但deepcopy的必須複製對象的所有字段遞歸地,我如何從Parent繼承並更改類字段,而不必在Parent實例中更改它es? – Makc
來自'copy'模塊的文檔:「此版本不復制類似模塊,類,函數,方法(...)」。你可以在'Child = copy.deepcopy(Parent)'後查看,'Child is Parent'是真的。 –