Python 内部 class 可以是它自己的外部 class 的子 class 吗?
Can a Python inner class be a subclass of its own outer class?
这个...
class A(object):
class B(A):
def __init__(self):
pass
... 抛出 "NameError: name 'A' is not defined".
是否有正确的语法来完成此操作,或者我必须使用像这样的变通方法?
class A(object):
pass
class _B(A):
pass
A.B = _B
先验是非常可取的。谢谢。
应 OP 要求,发布作为答复。
那是内class,不是子class。
不,内部 class 不能继承(不是扩展)它的外部 class 因为外部 class 在定义内部时没有完全定义class.
您的解决方法不是解决方法,因为它没有内部 class。你混淆了 subclasses 和 inner classes
您不能以正常方式执行此操作,并且可能不应该这样做。
对于那些有正当理由尝试类似操作的人,有一个解决方法,即在 A
完全定义后动态更改 A.B
的超类(请参阅 )。
这可能是糟糕的代码,是一个大 hack,不应该这样做,但它在特定条件下有效(参见链接的答案)
class T: pass
class A(object):
def a(self):
return "Hallo a"
class B(T):
def b(self):
return "Hallo b"
A.B.__bases__ = (A,)
b=A.B()
assert isinstance(b, A)
assert b.a()=="Hallo a"
现在你甚至可以做一些奇怪的事情了 x = A.B.B.B.B()
这个...
class A(object):
class B(A):
def __init__(self):
pass
... 抛出 "NameError: name 'A' is not defined".
是否有正确的语法来完成此操作,或者我必须使用像这样的变通方法?
class A(object):
pass
class _B(A):
pass
A.B = _B
先验是非常可取的。谢谢。
应 OP 要求,发布作为答复。
那是内class,不是子class。
不,内部 class 不能继承(不是扩展)它的外部 class 因为外部 class 在定义内部时没有完全定义class.
您的解决方法不是解决方法,因为它没有内部 class。你混淆了 subclasses 和 inner classes
您不能以正常方式执行此操作,并且可能不应该这样做。
对于那些有正当理由尝试类似操作的人,有一个解决方法,即在 A
完全定义后动态更改 A.B
的超类(请参阅 )。
这可能是糟糕的代码,是一个大 hack,不应该这样做,但它在特定条件下有效(参见链接的答案)
class T: pass
class A(object):
def a(self):
return "Hallo a"
class B(T):
def b(self):
return "Hallo b"
A.B.__bases__ = (A,)
b=A.B()
assert isinstance(b, A)
assert b.a()=="Hallo a"
现在你甚至可以做一些奇怪的事情了 x = A.B.B.B.B()