继承内部类Python3

问题描述:

我需要的是这样的继承内部类Python3

class Parent(object): 
    class Base(object): 
     def __init__(self, a, b): 
      self.a = a 
      self.b = b 


    class Derived(Base): 
     def __init__(self, a, b, c): 
      super(Derived,self).__init__(a, b) 
      self.c = c 

     def doit(): 
      pass 

parent = Parent() 
derived = parent.Derived(x,y,z) 
derived.doit() 

当我尝试运行它,我得到这个以下错误:NameError: name 'Derived' is not defined

我的“衍生”的地方试图与“基地”在super() - 没有帮助

+1

为什么要这样做?嵌套有什么意义? –

+1

在“Parent”中声明'Derived'会不会更好? –

+0

你正在运行什么python版本?超级().__ init__是不够的? – user3012759

前缀“衍生”与“家长”,成功了。正如我已经评论过这个问题。这只是为了试验'派生'类。但我仍然想知道'派生类(Base):'类是否正常('Base'类没有'Parent。'前缀)

class Parent(object): 
    class Base(object): 
     def __init__(self, a, b): 
      self.a = a 
      self.b = b 


    class Derived(Base): 
     def __init__(self, a, b, c): 
      super(Parent.Derived,self).__init__(a, b) 
      self.c = c 

     def doit(): 
      pass 

parent = Parent() 
derived = parent.Derived(x,y,z) 
derived.doit() 

类的继承不会改变父类。在这种情况下,Parent类只包含原始的Base类,而不包含派生类。

您可以简单地使用猴子打补丁来解决这个问题,

class Parent(object): 
    pass 


class Base(object): 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 


class Derived(Base): 
    def __init__(self, a, b, c): 
     super(Derived,self).__init__(a, b) 
     self.c = c 

    def doit(self): 
     pass 

Parent.Derived = Derived 

parent = Parent() 
x, y , z = 1, 1, 1 
derived = parent.Derived(x,y,z) 
derived.doit()