2016-07-25 2 views
0
class a(object): 
    def __init__(self): 
     self.num1=0 
     self.num2=0 
    def set1(self,score1,score2): 
     self.num1=score1 
     self.num2=score2 
    def show1(self): 
     print("num1",self.num1,"num2",self.num2) 

class b(a): 
    def __init__(self): 

     super().__init__() 

    def set2(self): 
     self.sum=self.num1+self.num2 
    def show2(self): 
     print("d=",self.sum) 

class c(b): 
    def __init__(self): 
     super.__init__() 
    def set3(self): 
     self.multiplication=self.num1*self.num2 
    def show3(self): 
     print("f=",self.multiplication) 

objects=c() 
objects.set1(1000,100) 
objects.show1() 
objects.set2() 
objects.show2() 
objects.set3() 
objects.show3() 

私は、継承の意味に動作するようにこのコードを書いたが、私は受け取る:Pythonで継承の概念を経てこのコードの継承に関する問題は何ですか?

objects=c() 
    File "C:\Users\user\Desktop\New folder\2.py", line 23, in __init__ 
    super.__init__() 
TypeError: descriptor '__init__' of 'super' object needs an argument 

はNUM1とNUM2は二つの数字であり、私はそれらの合計値との乗算を計算したいです。 問題は何か分かりません。このコードの問題点は何ですか? おかげで、

答えて

0

あなたはクラスc__init__super.__init__()代わりのsuper().__init__()を書きました。

Python 2を使用している場合は、次の方法でsuperに電話する必要があります。
super(ClassName, self).__init__()

0

あなたはすぐにスーパーを呼び出す必要があります。

class c(b): 

    super().__init__() 

他の事は、あなたがこの継承をより堅牢にしたい場合、あなたはそのよう__init__にすべての引数とkwargsから通過する可能性があることです。

def __init__(self, *args, **kwargs): 
    super().__init__(*args, **kwargs) 

これは、あなたのクラスはより柔軟になるだろう、複数の継承を開くことができます。クラスとクラスのインスタンス:

0

私はそれはあなたがビルトインHere the doc

あなたのケースではsuper()を使用する方法だと思う、スーパーは2引数を必要としています。

あなたb.__init__でsynthaxは次のようになります。ここで

super(b,self).__init__() 

発生した問題の解決策:

class b(a): 
    def __init__(self): 
     super(b, self).__init__() 
    def set2(self): 
     self.sum=self.num1+self.num2 
    def show2(self): 
     print("d=",self.sum) 

class c(b): 
    def __init__(self): 
     super(c, self).__init__() 
    def set3(self): 
     self.multiplication=self.num1*self.num2 
    def show3(self): 
     print("f=",self.multiplication) 
関連する問題