这段代码应该打印什么?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'是真的。 –