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

时间:2016-08-22 10:50:01

标签: python python-2.7 inheritance subclass

此...

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

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

是否有正确的语法来完成此任务,或者我必须使用这样的解决方法吗?

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

先前是非常优选的。谢谢。

2 个答案:

答案 0 :(得分:2)

你不能以正常的方式做到这一点,可能不应该这样做。

对于那些有正当理由尝试类似内容的人,可以在A.B完全定义后动态更改A的超类(见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 = A.B.B.B.B()

答案 1 :(得分:1)

根据OP请求,张贴为答案。

  1. 这是一个内部类,而不是一个子类。

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

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