在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'