メッソドのオーバーライド、superによる親のメソッドの呼び出し
メソッドのオーバーライド
継承後、メソッドを再定義(上書き)すること
qiita.py
class Car(object):
def run(self):
print("run")
class ToyotaCar(Car):
def run(self):
print("toyta_run")
class TeslaCar(Car):
def run(self):
print("tesla_run")
car = Car()
car.run()
#実行結果:run
toyota_car = ToyotaCar()
toyota_car.run()
#実行結果:toyota_run
tesla_car = TeslaCar()
tesla_car.run()
#実行結果:tesla_run
qiita.py
class Car(object):
def __init__(self,model=None):
#ベースクラスは何も設定しない
self.model = model
def run(self):
print("run")
class ToyotaCar(Car):
def run(self):
print("toyta_run")
class TeslaCar(Car):
def run(self):
print("tesla_run")
toyota_car = ToyotaCar("Lexus")
print(toyota_car.model)
#メソッドだけでなくクラス変数も.で呼び出せる
#実行結果:Lexus
tesla_car = TeslaCar("modelS")
print(tesla_car.model)
#実行結果:modelS
superによる親のメソッドの呼び出し
親クラスの要請
使い所
class TeslaCar(Car)のinitがclass Car(object)のinitを上書きしてしまう為、同じコードを書く必要がある
qiita.py
class Car(object):
def __init__(self,model=None):
#ベースクラスは何も設定しない
self.model = model
def run(self):
print("run")
class ToyotaCar(Car):
def run(self):
print("toyta_run")
class TeslaCar(Car):
def __init__(self, model= "ModelS", enable_auto_run=False):
self.model = model
self.enable_auto_run=enable_auto_run
def run(self):
print("tesla_run")
使用例
sueperを用いることで親クラスのinitを呼び出すことが可能になる
qiita.py
class Car(object):
def __init__(self,model=None):
#ベースクラスは何も設定しない
self.model = model
def run(self):
print("run")
class ToyotaCar(Car):
def run(self):
print("toyta_run")
class TeslaCar(Car):
def __init__(self, model= "ModelS", enable_auto_run=False):
# self.model = model
# 同じ処理を避ける
super().__init__(model)
self.enable_auto_run=enable_auto_run
def run(self):
print("tesla_run")
Author And Source
この問題について(メッソドのオーバーライド、superによる親のメソッドの呼び出し), 我々は、より多くの情報をここで見つけました https://qiita.com/kirinboy96/items/6ffff8a9643c1e901c15著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .