どーも、ぐるたか@guru_takaです。
PythonのClassで頻出するinitやsuperについて、簡単にまとめました。初学者の参考になれば幸いです。
サンプルコード
サンプルコードに沿って、進めていきます。
python
class Human:
def __init__(self,name):
self.name = name
class Greet(Human):
def __init__(self, name, age):
super().__init__(name)
self.age = age
def hello(self):
print(self.name, 'さん こんにちは!')
greet = Greet('gurutaka',50)
greet.name, greet.age
>>> ('gurutaka', 50)
greet.hello()
>>> gurutaka さん こんにちは!
initについて
__init__
は、インスタンス化したときに、一度だけ呼び出される関数です。コンストラクタといいます。
初期化の処理というイメージでOKです!
以下のようにHumanクラスをインスタンス化すると、__init__
内の処理が動きます。そして、プロパティ'name'
に”ぐるたか”が入るのです。
Python
human = Human('ぐるたか')
human.name
>>> ぐるたか
superについて
Superは継承で使います。継承とは、他で定義したクラスを引き継ぐことを意味します。最初に紹介したサンプルコードでは、Greetクラス(子)がHumanクラス(親)を引き継いでいます。
コードの書き方はシンプルで、Greet(Human)
のように、クラスを定義する際に継承したいクラスを引数に渡すだけです!
ただ、このままでは継承元である親クラス(Human)のコンストラクタは定義されません。ここでsuper
関数が登場します!
super().メソッド名()
と記述することで、継承元のメソッドを呼び出せます。
なので、サンプルコードのように、super().__init__(name)
と書けば、継承元のコンストラクタを定義できます。
すると、サンプルコードのように、Greetクラス(子)をインスタンス化すると、コンストラクタで定義されたHumanクラス(親)のnameが使えるようになります!
MEMO
Python2ではsuper(Greet, self).__init__(name)
と書く必要がありましたが、Python3からsuper().__init__(name)
と省略できるようになりました。
コメントを残す