1. ホーム
  2. python

[解決済み] Pythonの継承とinitメソッド

2022-10-19 15:43:30

質問

Python初心者の者です。継承と __init__() .

class Num:
    def __init__(self,num):
        self.n1 = num

class Num2(Num):
    def show(self):
        print self.n1

mynumber = Num2(8)
mynumber.show()

結果 8

これはOKです。しかし、私は Num2

class Num2(Num):
    def __init__(self,num):
        self.n2 = num*2
    def show(self):
        print self.n1,self.n2

結果 Error. Num2 has no attribute "n1".

この場合、どのようにすれば Num2 にアクセスします。 n1 ?

どのように解決するのですか?

最初の状況では Num2 はクラスを拡張しています。 Num という名前の特別なメソッドを再定義していないので __init__()Num2 から継承される。 Num .

クラスが __init__() メソッドが定義されている場合、クラスのインスタンス化は が自動的に呼び出されます。 __init__() を呼び出します。 を自動的に呼び出します。

2番目の状況では、再定義しているので __init__()Num2 を呼び出すには、スーパークラス内のものを明示的に呼び出す必要があります ( Num ) の挙動を拡張したい場合は、明示的に呼び出す必要があります。

class Num2(Num):
    def __init__(self,num):
        Num.__init__(self,num)
        self.n2 = num*2