2016-08-04 125 views
-1

我嘗試了不少時間裏,卻沒有得到以下的代碼工作如何嵌套類和繼承類

預先感謝任何幫助/建議

class A(object): 
    def __init__(self,x,y,z): 
     self.c=C(x,y,z) 
    def getxyz(self): 
     return self.c.getxyz() 

    class B(object): 
     def __init__(self,x,y): 
      self.x=x 
      self.y=y 
     def getxy(self): 
      return self.x, self.y 
    class C(B): 
     def __init__(self,x,y,z): 
      super(C,self).__init__(x,y) 
      #self.x,self.y=x,y 
      self.z=z 
     def getxyz(self): 
      (x,y)=self.getxy() 
      return x,y,self.z 
a=A(1,2,3) 
a.getxyz() 
+2

你爲什麼要這樣做? –

+0

我不知道爲什麼會降低票數,並投票選出一個相關的問題。然而,OP可能會增加他得到的錯誤。 – jsbueno

回答

2

我又不是100%肯定,爲什麼你嵌套類(很少是你真正想做的事),但行

self.c = C(x,y,z) 

幾乎可以肯定是這裏的問題。除非我不明白你想要完成的是什麼(這很可能是),你應該可以做

class A(object): 

    def __init__(self, x, y, z): 
     self.c = self.C(x,y,z) 

    def getxyz(self): 
     return self.c.getxyz() 

    class B(object): 

     def __init__(self, x, y): 
      self.x = x 
      self.y = y 

     def getxy(self): 
      return self.x, self.y 

    class C(B): 

     def __init__(self, x, y, z): 
      super(A.C, self).__init__(x,y) 
      self.z = z 

     def getxyz(self): 
      (x,y) = self.getxy() 
      return x, y, self.z 
+0

「self.c」修復是正確的 - 然而,空的「super()」調用僅僅是Python3 - 問題可能是使用Python2 - 所以'super'必須有參數,而OP代碼會中斷 - 它應該是'super(AC,self).__ init __(x,y)' – jsbueno

+0

(我確實修復了這個錯誤,現在代碼會運行) – jsbueno

+0

@georgeandrew:請注意, m不是100%確定你爲什麼要嵌套類「是答案的正確性的一部分:-)然而,這段代碼將工作。 – jsbueno