在Python中继承时增强类属性 - python

我在Python中有一个继承链,我希望每个子类都能够添加新的自定义参数。现在我正在这样做:

class A(object):
  PARAM_NAMES = ['blah1']
  ...

class B(A):
  PARAM_NAMES = A.PARAM_NAMES + ['blah2']
  ...

我想知道是否有一个不使用slicker的方法,而没有两次引用A?无法使用super(),因为它不在方法定义afaik中。我想我可以使用类方法,但是那样会很烦人(因为我真的想要一个属性)。

什么是正确的方法?

python大神给出的解决方案

总的来说,您总是可以使用黑魔法...但是问题仅仅是因为您可以...应该吗?

class MyMeta(type):
    items = []
    def __new__(meta, name, bases, dct):
        return super(MyMeta, meta).__new__(meta, name, bases, dct)
    def __init__(cls, name, bases, dct):
        MyMeta.items.extend(cls.items)
        cls.items = MyMeta.items[:]
        super(MyMeta, cls).__init__(name, bases, dct)

class MyKlass(object):
    __metaclass__ = MyMeta

class A(MyKlass):
    items=["a","b","c"]

class B(A):
    items=["1","2","3"]

print A.items
print B.items

由于这会创建一个副本,因此不会遇到与其他解决方案相同的问题

(请注意,我确实不建议这样做……只是为了表明您可以)