Python类属性可以添加吗?

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.

aba*_*ert 5

这里最简单的解决方案是明确:

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)

这里棘手的事情可以做,以使这更自动的,但我不认为你想.(如果您认为自己想要,请先阅读描述符或元类如何工作,然后再回答具体问题.)