Python100本ノック#5 Pythonの継承(inheritance)

2023/11/29に公開

継承とは

既存のクラスをもとに、新しいクラスを作成することを「継承」と言う。
既存クラスを継承して作成したクラスを「派生クラス」と言う。

継承元となるクラスを「親クラス」や「スーパークラス」、「基底クラス」などと呼ぶ。
継承先のクラスは「子クラス」「サブクラス」、「派生クラス」と呼ぶ。

継承の基本文法

class B(object):
    pass

clss A(B):
    pass
    
a = A()

具体例

Personクラスを継承するTeacherとStudentクラス

class Person(object):
    def eat(self):
        print('i can eat food!')

    def speak(self):
        print('i can speak!')

class Teacher(Person):
    pass

class Student(Person):
    pass

teacher = Teacher()
teacher.eat()
teacher.speak()

student = Student()
student.eat()
studnet.speak()

output

i can eat food!
i can speak!
i can eat food!
i can speak!

単一継承

継承先が1だけの場合は、単一継承と言う。

基本文法

# 1、親クラス
class Person(object):
    pass
# 2、子クラス
class Teacher(Person):
    pass

具体例

自動車を継承するガソリン車とEV車

# 1、自動車クラス
class Car(object):
    def run(self):
        print('i can run')
# 2、ガソリン車クラス
class GasolineCar(Car):
    pass
# 3、EV車
class EletricCar(Car):
    pass

bwm = GasolineCar()
bwm.run()

tesla = EletricCar()
tesla.run()

output

i can run
i can run

多段階継承

Aを継承するB、Bを継承するCの場合は、CはAを継承することになる。

class C(object):
    def func(self):
        print('Cクラスのfunc')
        
class B(C):
    pass

class A(B):
    pass

a = A()
a.func()

output

Cクラスのfunc

多重継承

同時に複数のクラスを継承することを「多重継承」と言う。
チーム開発では属性とメソッドの重複が発生しやすいため、多重継承を利用しないほうがよいらしい。

基本文法

class B(object):
    pass

class C(object):
    pass

class A(B, C):
    pass

a = A()

具体例

class GasolineCar(object):
    def run_with_gasoline(self):
        print('i can run with gasoline')
        
class EletricCar(object):
    def run_with_eletric(self):
        print('i can run with eletric')
        
class HybridCar(GasolineCar, EletricCar):
    pass

toyota = HybridCar()
toyota.run_with_gasoline()
toyota.run_with_eletric()

output

i can run with gasoline
i can run with eletric

Discussion