在Python中,如何将super用于类属性?

在Python中,如何将super用于类属性?,python,Python,以这两类为例: class A(object): name = "A" class B(A): name = "Child of " + A.name 简单A.name将是“A”,而B.name将是“A的孩子” 但是把A.name硬编码到B对名称的定义中似乎是错误的。我自然想写一些东西,比如: class B(A): name = "Child of " + super(B).name 但这会引发namererror,表达式super(B)中尚未定义B。(另外,我不

以这两类为例:

class A(object):
    name = "A"

class B(A):
    name = "Child of " + A.name
简单
A.name
将是“A”,而
B.name
将是“A的孩子”

但是把
A.name
硬编码到
B
名称的定义中似乎是错误的。我自然想写一些东西,比如:

class B(A):
    name = "Child of " + super(B).name
但这会引发
namererror
,表达式
super(B)
中尚未定义
B
。(另外,我不确定它是否应该/将会是
super(B)
super(B,B)
或其他什么,但考虑到
名称错误
,这是一个没有意义的问题)


正确的方法是什么,即在类属性的定义中使用
super
。如果必须这样做,则需要在B的主体中显式使用A。

这不能在类定义内完成,因为您发现:在类定义内,您无权访问类本身,因为它尚未定义

不过,您可以使用类装饰器(如果您使用的是带有类装饰器的Python版本,我认为是2.6及更高版本):

>>> class A(object):
...     name = "A"
>>> def makeAttr(cls):
...     cls.name = "Child of " + super(cls, cls).name
...     return cls
>>> @makeAttr
... class B(A):
...     name = "B"
>>> B.name
'Child of A'