1

考虑这两个类:

class A(object):
    name = "A"

class B(A):
    name = "Child of " + A.name

简单的。A.name将是“A”,B.name将是“A 的孩子”。

但是将. 的定义硬编码A.name到. 我自然想写这样的东西:Bname

class B(A):
    name = "Child of " + super(B).name

但这引发了NameError尚未B在表达式中定义的a super(B)。(另外,我不确定它是否应该/将是super(B)super(B, B)其他什么,但鉴于NameError.)

这样做的正确方法是什么,即super在类属性的定义中使用?

4

2 回答 2

2

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

不过,您可以使用类装饰器来做到这一点(如果您使用的是带有类装饰器的 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'
于 2012-09-02T03:01:45.170 回答
0

你不能。如果必须这样做,则需要在 B 的主体中显式使用 A。

于 2012-09-02T02:50:12.120 回答