在Python中,如何对class属性使用super?

2024-09-21 05:52:31 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下两类:

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尚未在表达式super(B)中定义。(另外,我不确定它是否应该是super(B)或者super(B, B)或者其他什么,但是考虑到NameError,这是一个没有意义的观点。)

正确的方法是什么,即在类属性的定义中使用super?你知道吗


Tags: ofnamechild编码定义object表达式错误
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'

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

相关问题 更多 >

    热门问题