Python チュートリアル-クラスの継承

  1. Python クラス継承メソッドのオーバーライド
  2. Python クラスの多重継承
  3. 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 クラスで使用できることがわかります。これは、CarAuto から継承されているためです。

Car のコンストラクター内で、Auto のコンストラクターが呼び出されます。Car のオブジェクトを使用して、Auto のすべてのメソッドを呼び出すことができます。

Python クラス継承メソッドのオーバーライド

メソッドのオーバーライドは、子クラスと親クラスの両方に同じメソッドがある場合です。メソッドのオーバーライドは、基本的に、子クラスが親クラスのメソッドの実装を変更する概念です。

子クラス CarAuto クラスと同じ 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(子クラス)のオブジェクトは、親クラスAB のメソッドを呼び出すことができることに注意してください。したがって、C は AB のすべてを継承すると言うことができます。

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 クラスがその親クラスと祖父母クラスのメソッドを呼び出すことができることがわかります。

comments powered by Disqus