Python チュートリアル-クラスの継承
このセクションでは、Python オブジェクト指向プログラミングの継承について学びます。
継承では、子クラスは親クラスから作成されます。子クラスは、親クラスからすべて(データメンバーとメンバー関数)を継承します。
Python の継承の構文は次のとおりです。
class ParentClass:
# members
class ChildClass(ParentClass):
# members
子クラスには、親クラスのすべての機能があり、新しい機能を追加することもできます。
以下の例のように、それは Auto
という名前の親クラスを持ち、子クラス car
はそれから継承されます。
>>> class Auto:
def __init__(self, e, n):
self.engine = e
self.name = n
def display(self):
print("Name of Auto: ", self.name)
print("Engine of auto: ", self.engine)
>>> class Car(Auto):
def __init__(self):
self.x= input("Enter name of car: ")
self.y= input("Enter engine of car: ")
Auto.__init__(self,self.y,self.x)
>>> c = Car()
Enter name of car: Prius
Enter engine of car: 1.5l
>>> c.display()
Name of Auto: Prius
Engine of auto: 1.5l
ここでは、Auto
クラスのメソッドを Car
クラスで使用できることがわかります。これは、Car
が Auto
から継承されているためです。
Car
のコンストラクター内で、Auto
のコンストラクターが呼び出されます。Car
のオブジェクトを使用して、Auto
のすべてのメソッドを呼び出すことができます。
Python クラス継承メソッドのオーバーライド
メソッドのオーバーライドは、子クラスと親クラスの両方に同じメソッドがある場合です。メソッドのオーバーライドは、基本的に、子クラスが親クラスのメソッドの実装を変更する概念です。
子クラス Car
が Auto
クラスと同じ display
メソッドを持っているが、実装が変更されている例を考えてみましょう。
>>> class Auto:
def __init__(self, e, n):
self.engine = e
self.name = n
def display(self):
print("Name of Auto: ", self.name)
print("Engine of auto: ", self.engine)
>>> class Car(Auto):
def __init__(self):
self.x= input("Enter name of car: ")
self.y= input("Enter engine of car: ")
Auto.__init__(self,self.y,self.x)
def display(self):
print("You are in child class")
>>> c = Car()
Enter name of car: Prius
Enter engine of car: 1.5l
>>> c.display()
You are in child class
そのため、オブジェクト c
で表示メソッドが呼び出されると、子クラスのメソッドが呼び出されます。
Python クラスの多重継承
子クラスに複数の親クラスがある場合、多重継承が発生します。各親クラスの機能は、子クラスに継承されます。
以下は、多重継承の構文です。
class A:
# members
class B:
# members
class child(A, B):
# members
例:
>>> class A:
def dispA(self):
print('You are in class A')
>>> class B:
def dispB(self):
print('You are in class B')
>>> class C(A, B):
def dispC(self):
print('You are in class C')
>>> Cobj = C()
>>> Cobj.dispA()
You are in class A
>>> Cobj.dispB()
You are in class B
>>> Cobj.dispC()
You are in class C
C
(子クラス)のオブジェクトは、親クラス A
と B
のメソッドを呼び出すことができることに注意してください。したがって、C は A
と B
のすべてを継承すると言うことができます。
Python クラスのマルチレベル継承
マルチレベル継承は、別の子クラスから子クラスを継承する場合です。
マルチレベル継承の構文は次のとおりです。
class A:
# members
class B(A):
# members
class C(B):
# members
例:
>>> class A:
def dispA(self):
print('You are in class A')
>>> class B(A):
def dispB(self):
print('You are in class B')
>>> class C(B):
def dispC(self):
print('You are in class C')
>>> Cobj = C()
>>> Cobj.dispA()
You are in class A
>>> Cobj.dispB()
You are in class B
>>> Cobj.dispC()
You are in class C
ここで、C
クラスがその親クラスと祖父母クラスのメソッドを呼び出すことができることがわかります。