Bil*_*one 0 python inheritance list
我有一个具有以下类结构的项目:
class A(object):
elems = [1, 2, 3]
class B(A):
pass
class C(B):
elems = [20, 100]
class D(B):
elems = [4, 5]
Run Code Online (Sandbox Code Playgroud)
目前,Python的默认继承行为是覆盖elems每个后续属性声明中的属性,例如:
A.elems == [1, 2, 3]
B.elems == [1, 2, 3]
C.elems == [20, 100]
D.elems == [4, 5]
Run Code Online (Sandbox Code Playgroud)
我希望能够访问这些值的附加列表.换句话说,我希望能够检索以下列表:
A.collated() == [1, 2, 3]
B.collated() == [1, 2, 3]
C.collated() == [1, 2, 3, 20, 100]
D.collated() == [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做.任何帮助将不胜感激.
在此先感谢,
- B.
这里最简单的解决方案是明确:
class A(object):
elems = [1, 2, 3]
@classmethod
def collated(cls):
return sorted(cls.elems)
class B(A):
pass
class C(B):
elems = B.elems + [20, 100]
class D(B):
elems = B.elems + [4, 5]
print "A.collated() == ", A.collated()
print "B.collated() == ", B.collated()
print "C.collated() == ", C.collated()
print "D.collated() == ", D.collated()
Run Code Online (Sandbox Code Playgroud)
这里是棘手的事情可以做,以使这更自动的,但我不认为你想.(如果您认为自己想要,请先阅读描述符或元类如何工作,然后再回答具体问题.)