繁体   English   中英

Python 内部类可以是它自己的外部类的子类吗?

[英]Can a Python inner class be a subclass of its own outer class?

这个...

class A(object):
    class B(A):
        def __init__(self):
            pass

...抛出“NameError:名称'A'未定义”。

是否有正确的语法来实现这一点,或者我必须使用像这样的解决方法?

class A(object):
    pass
class _B(A):
    pass
A.B = _B

先验是非常可取的。 谢谢你。

您不能以正常方式执行此操作,并且可能不应该执行此操作。

对于那些有正当理由尝试类似操作的人,有一种解决方法是在A完全定义后动态更改AB的超类(请参阅https://stackoverflow.com/a/9639512/5069869 )。

这可能是糟糕的代码,一个很大的黑客,不应该做,但它在某些条件下工作(见链接的答案)

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 = ABBBB()

根据 OP 的要求,作为答案发布。

  1. 那是内部类,而不是子类。

  2. 不,内部类不能继承(不扩展)其外部类,因为在定义内部类时未完全定义外部类。

  3. 您的解决方法不是解决方法,因为它没有内部类。 你混淆了子类和内部类

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM