2015-04-17 108 views
2

我需要的是這樣的繼承內部類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

回答

0

前綴「衍生」與「家長」,成功了。正如我已經評論過這個問題。這只是爲了試驗'派生'類。但我仍然想知道'派生類(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() 
2

類的繼承不會改變父類。在這種情況下,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()