我有一个 python 类层次结构,我想在运行时扩展它。此外,这个层次结构中的每个类都有一个静态属性“dict”,我想在每个子类中覆盖它。简单地说,它看起来像这样:
'dict' 是受保护的(公共但带有前导下划线)成员
class A(object):
_dict = {}
@classmethod
def getdict(cls):
return cls._dict
@classmethod
def setval(cls, name, val):
cls._dict[name] = val
@classmethod
def addchild(cls, name):
return type(name, (cls, ), { '_dict' : {} })
B = A.addchild('B')
A.setval(1, 5)
print A.getdict()
# prints: {1: 5}
# like expected
print B.getdict()
# prints: {}
# like expected
这就像预期的那样工作。现在的问题是:如果我将属性声明为私有,为什么它不再起作用:
现在,“dict”成为私人成员也是如此
class C(object):
__dict = {}
@classmethod
def getdict(cls):
return cls.__dict
@classmethod
def setval(cls, name, val):
cls.__dict[name] = val
@classmethod
def addchild(cls, name):
return type(name, (cls, ), { '__dict' : {} })
D = C.addchild('D')
C.setval(1, 5)
print C.getdict()
# prints: {1: 5}
# like expected
print D.getdict()
# prints: {1: 5}
# why!?
突然D
, , 的子类C
在 'dict' 中的值与其超类相同!?
谁能这么好心向我解释一下,这是什么原因?提前致谢!