class A(object):
class B(A):
def __init__(self):
pass
...抛出 “NameError:名字 'A' 没有定义”。
是否有正确的语法来完成这项工作,还是必须使用变通方法?
class A(object):
pass
class _B(A):
pass
A.B = _B
以前是强烈优选的。谢谢。
class A(object):
class B(A):
def __init__(self):
pass
...抛出 “NameError:名字 'A' 没有定义”。
是否有正确的语法来完成这项工作,还是必须使用变通方法?
class A(object):
pass
class _B(A):
pass
A.B = _B
以前是强烈优选的。谢谢。
根据OP的要求,张贴为答案。
这是一个内部类,而不是子类。
不,内部类不能继承(不扩展)它的外部类,因为外部类在定义内部类时没有完全定义。
您的解决方法不是解决方法,因为它没有内部类。你混淆的子类和内部类
你不能这样做的正常方式,可能不应该这样做。
对于那些有充分理由尝试类似的人,通过在完全定义A
(请参阅https://stackoverflow.com/a/9639512/5069869)后动态更改A.B
的超类有一个解决方法。
这可能是可怕的代码,一个大黑客,不应该做的,但它的工作原理在一定条件下(见链接答案)
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()
噢,好主...感谢你的工作例子,但。它阐明了人们为了实现这个目标必须采取多么落后的行动。我将以不同的方式处理课程结构。 – ca2longoria
如果有人这样做,我希望他们好运调试:) – DeepSpace
1这是一个内部类,而不是一个子类。 2.不,内部类不能继承(不扩展)它的外部类,因为外部类在定义内部类时没有完全定义。 3.您的解决方法不是解决方法,因为它没有内部类。你混淆了子类和内部类。 – DeepSpace
请注意,在Python中,内部类很少有很好的用例。 –
然后我错误地查询了这个查询。所以这对内心阶层来说是不可能的。是否有可能重命名这个问题,还是问题无效? – ca2longoria