継承はオブジェクト指向パラダイムの重要な側面です。継承により、最初からクラスを作成するのではなく、既存のクラスを使用して新しいクラスを作成できるため、プログラムにコードの再利用性が提供されます。
継承では、子クラスがプロパティを取得し、親クラスで定義されているすべてのデータ メンバーと関数にアクセスできます。子クラスは、その特定の実装を親クラスの関数に提供することもできます。チュートリアルのこのセクションでは、継承について詳しく説明します。
改行Python
Python では、派生クラス名の後に括弧内に基底を記述するだけで、派生クラスは基底クラスを継承できます。基本クラスを派生クラスに継承するには、次の構文を検討してください。
構文
class derived-class(base class):
クラスは、すべてのクラスを括弧内に記述することで複数のクラスを継承できます。次の構文を考えてみましょう。
構文
class derive-class(, , ..... ):
例1
class Animal: def speak(self): print('Animal Speaking') #child class Dog inherits the base class Animal class Dog(Animal): def bark(self): print('dog barking') d = Dog() d.bark() d.speak()
出力:
dog barking Animal Speaking
Python のマルチレベル継承
Python では、他のオブジェクト指向言語と同様に、マルチレベルの継承が可能です。マルチレベルの継承は、派生クラスが別の派生クラスを継承するときにアーカイブされます。マルチレベル継承が Python でアーカイブされるレベルの数に制限はありません。
マルチレベル継承の構文を以下に示します。
構文
class class1: class class2(class1): class class3(class2): . .
例
class Animal: def speak(self): print('Animal Speaking') #The child class Dog inherits the base class Animal class Dog(Animal): def bark(self): print('dog barking') #The child class Dogchild inherits another child class Dog class DogChild(Dog): def eat(self): print('Eating bread...') d = DogChild() d.bark() d.speak() d.eat()
出力:
dog barking Animal Speaking Eating bread...
Python の多重継承
Python は、子クラスで複数の基本クラスを継承する柔軟性を提供します。
多重継承を実行するための構文を以下に示します。
構文
class Base1: class Base2: . . . class BaseN: class Derived(Base1, Base2, ...... BaseN):
例
class Calculation1: def Summation(self,a,b): return a+b; class Calculation2: def Multiplication(self,a,b): return a*b; class Derived(Calculation1,Calculation2): def Divide(self,a,b): return a/b; d = Derived() print(d.Summation(10,20)) print(d.Multiplication(10,20)) print(d.Divide(10,20))
出力:
30 200 0.5
issubclass(sub,sup) メソッド
issubclass(sub, sup) メソッドは、指定されたクラス間の関係を確認するために使用されます。最初のクラスが 2 番目のクラスのサブクラスの場合は true を返し、そうでない場合は false を返します。
次の例を考えてみましょう。
例
class Calculation1: def Summation(self,a,b): return a+b; class Calculation2: def Multiplication(self,a,b): return a*b; class Derived(Calculation1,Calculation2): def Divide(self,a,b): return a/b; d = Derived() print(issubclass(Derived,Calculation2)) print(issubclass(Calculation1,Calculation2))
出力:
True False
isinstance (obj, class) メソッド
isinstance() メソッドは、オブジェクトとクラス間の関係を確認するために使用されます。最初のパラメータ、つまり obj が 2 番目のパラメータ、つまり class のインスタンスである場合、true を返します。
次の例を考えてみましょう。
例
class Calculation1: def Summation(self,a,b): return a+b; class Calculation2: def Multiplication(self,a,b): return a*b; class Derived(Calculation1,Calculation2): def Divide(self,a,b): return a/b; d = Derived() print(isinstance(d,Derived))
出力:
True
メソッドのオーバーライド
親クラスのメソッドの特定の実装を子クラスに提供できます。親クラスのメソッドが特定の実装を使用して子クラスで定義されている場合、その概念はメソッドのオーバーライドと呼ばれます。子クラスで親クラスのメソッドの異なる定義が必要なシナリオでは、メソッドのオーバーライドを実行する必要がある場合があります。
Python でメソッドのオーバーライドを実行する次の例を考えてみましょう。
例
class Animal: def speak(self): print('speaking') class Dog(Animal): def speak(self): print('Barking') d = Dog() d.speak()
出力:
Barking
メソッドオーバーライドの実例
class Bank: def getroi(self): return 10; class SBI(Bank): def getroi(self): return 7; class ICICI(Bank): def getroi(self): return 8; b1 = Bank() b2 = SBI() b3 = ICICI() print('Bank Rate of interest:',b1.getroi()); print('SBI Rate of interest:',b2.getroi()); print('ICICI Rate of interest:',b3.getroi());
出力:
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 8
Pythonでのデータ抽象化
抽象化はオブジェクト指向プログラミングの重要な側面です。 Python では、非表示にする属性にプレフィックスとして二重アンダースコア (___) を追加することで、データを非表示にすることもできます。これ以降、属性はオブジェクトを通じてクラスの外部では表示されなくなります。
次の例を考えてみましょう。
3か月ぶり
例
class Employee: __count = 0; def __init__(self): Employee.__count = Employee.__count+1 def display(self): print('The number of employees',Employee.__count) emp = Employee() emp2 = Employee() try: print(emp.__count) finally: emp.display()
出力:
The number of employees 2 AttributeError: 'Employee' object has no attribute '__count'