2016-08-04 5 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

なぜ私はdownvotes、そしてクローズする投票はかなり適切な質問を見るのか分かりません。 OPは彼が何を得ているのかを追加するかもしれない。 – jsbueno

答えて

2

I 「なぜあなたはクラスをネストしている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'はパラメータを持っていなければなりません。コードが壊れる - それは 'super(AC、self).__ init __(x、y)' – jsbueno

+0

でなければならない(コードを実行するように修正した) – jsbueno

+0

@georgeandrew:あなたがクラスを入れ子にしている理由を100%確信していません "という答えの正確さの一部です:-)しかし、このコードはうまくいきます。 – jsbueno

関連する問題