在Python中使用子类成员中的super

时间:2014-05-15 21:24:52

标签: python class subclass super

请考虑以下代码:

>>> class A:
...    k = 1
...
>>> class B(A):
...     k = super(B, cls).k
...
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "<console>", line 2, in B1
NameError: name 'B' is not defined

为什么这会导致错误,最好的解决方法是什么? 感谢。

1 个答案:

答案 0 :(得分:3)

super()只能在方法中使用,而不能在类定义中使用。它需要访问MRO类,在构建B类主体时尚不知道。

更好的是,B在定义类时尚未绑定!在完成课堂主体之后才会发生这种情况;在创建类对象之前,首先需要一个类体。

请勿覆盖k

class A:
    k = 1

class B(A):
    pass

B.k继承自A

或直接引用;毕竟,在确定类时,你确切知道你有哪些基类:

class A:
    k = 1

class B(A):
    k = A.k