Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの継承:ステップバイステップガイド

Pythonの継承とは、サブクラスが別のクラスのコードを使用する場合です。継承は、Pythonのようなオブジェクト指向言語の重要な機能であり、コーディングをより簡単かつ効率的にします。


Pythonはオブジェクト指向言語です。つまり、コードをより効率的にするために、再利用可能なコードブロックの作成をサポートしています。これが発生する方法の1つは、あるサブクラスが別のクラスのコードを使用できる継承によるものです。

たとえば、「銀行口座」を格納するクラスがあり、「銀行口座」の既存のクラスの属性を参照できる「ゴールド銀行口座」を格納するサブクラスを作成したい場合があります。

このチュートリアルでは、Pythonでの継承の基本を説明します。また、親と子のPythonクラスがどのように機能するか、クラスオブジェクトを操作するときに属性とメソッドをオーバーライドする方法についても説明します。

Pythonの継承

継承は、別のクラス内のPythonクラスを説明するために使用される用語です。 サブクラスと呼ばれるクラス または子クラス 親クラスから値を継承できます 、実世界で子供が親から特性を継承する方法と似ています。

継承は、サブクラスを作成できるので便利です。 親クラスと同じ値型を持ち、それらの型を複数回宣言する必要はありません。

親クラス

親クラス(基本クラスとも呼ばれます サブクラスがアクセスできるマスター構造を作成します。親クラスから派生したクラスメソッドと同じ共通値のセットを何度も宣言しなくても、複数のサブクラスを作成できます。

例を使用して、これが実際にどのように機能するかを説明しましょう。親と子の2つの異なる銀行口座タイプで機能するプログラムがあるとします。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

これらの口座は両方とも銀行口座であるため、同様の値になります。ただし、これらのアカウントにはそれぞれ独自の情報が必要な場合があります。たとえば、親のアカウントは当座貸越をサポートしているのに対し、子供のアカウントは残高でのみ機能する場合があります。

したがって、これらの値を使用してプログラムを作成する場合は、最初に銀行口座のクラス(親クラス)を定義し、次にサポートする2種類の銀行口座(親と子)の子クラスを作成します。

銀行口座の親クラスを宣言する例を次に示します。

class BankAccount:
	def __init__(self, forename, surname, balance):
		self.forename = forename
		self.surname = surname
		self.balance = balance

クラスBankAccountを作成しました これは、forename、surname、およびbalanceの3つの値を格納します。次のように、クラスにメソッドを追加することもできます。

class BankAccount:
	def __init__(self, forename, surname, balance):
		self.forename = forename
		self.surname = surname
		self.balance = balance

	def getDetails(self):
		print("Forename: ", self.forename)
		print("Surname: ", self.surname)

	def getBalance(self):
		print("Balance: $ ", self.balance)

このクラスには、3つの値と、詳細とバランスという2つの新しいメソッドが格納されています。 詳細 メソッドを使用して、アカウント所有者の名前と名前、および残高を確認できます。 メソッドはアカウント所有者の残高を返します。

BankAccountで宣言するすべてのメソッドと変数 クラスは子クラスでアクセスできます。

クラスの実際の様子を説明するために、銀行口座の例を作成しましょう。次のコードを使用してこれを行うことができます:

account = BankAccount("John", "Appleseed", 100)

これにより、 John Appleseedのアカウントが作成されます これには100ドルが含まれています。アカウントの準備ができたので、他のクラスと同じようにアカウントを参照し始めることができます。 getBalance()を実行している例を次に示します。 私たちの銀行口座内の方法で、私たちがどれだけのお金を持っているかを調べます:

print(account.getBalance())

私たちのプログラムは以下を返します:

Balance: $ 100

子クラス

上記の例では、銀行口座を格納する親クラスを宣言しました。しかし、18歳未満の子供のアカウントなど、特定の種類のアカウントに関する情報を保存したい場合はどうでしょうか。そこで、子クラスが登場します。

子クラスまたはサブクラスは、親クラスから値を継承します。これは、各子クラスが、親クラスで宣言したメソッドと変数を参照できることを意味します。

したがって、 ChildBankAccountの子クラスを作成するとします。 。このアカウントは、ユーザーの銀行口座情報(名前と残高)を返すことができ、制限付きという新しい値も持っている必要があります。 。 18歳未満であり、完全な銀行口座を利用できないため、この値はお子様のアカウントに保存されます。

子クラスを作成するには、次のコードを使用できます。

class ChildBankAccount(BankAccount):

ChildBankAccount クラスはBankAccountの子になります BankAccountのためのクラス 括弧で囲まれています。子クラスに親クラスとまったく同じ値を設定する場合は、 BankAccount - passを使用できます このようなキーワード:

class ChildBankAccount(BankAccount):
	pass

ただし、前に説明したように、子アカウントには特別な値を格納する必要があります。これは、ユーザーのアカウントが制限されていることを示す変数です。

この目標を達成するために、 restrictedという新しい値を追加します。 私たちの子供クラスに。これは、次のコードを使用して実行できます。

class ChildBankAccount(BankAccount):
	def __init__(self, forename, surname, balance, restricted=True):
self.forename = forename
self.surname = surname
self.balance = balance
self.restricted = restricted

	def isRestricted(self):
		print("This account is restricted as the user is under 18.")

それでは、コードを分解してみましょう。

上記のコードでは、ChildBankAccountsに、名前、名前、残高、制限付きの4つの値を保持するように指定しています。

最初の3つ(名前、名前、バランス)は、親クラスの値と同じですが、制限されています は新しく、私たちの子供クラス専用です。デフォルトでは、制限付き Trueに設定されています 。

したがって、標準の BankAccountを作成すると ( ChildBankAccountではありません )、制限付きにアクセスできなくなります 価値。同様に、 isRestrictedにアクセスすることはできません ChildBankAccountを作成しない限りメソッド 。

ChildBankAccountを作成する例を次に示します。 getBalance()を使用します およびisResticted() クラスの詳細を学ぶためのメソッド:

child_account = ChildBankAccount("Bill", "Appleseed", 100) 
print(child_account.getBalance())
print(child_account.isRestricted())

コードは次を返します:

Balance: $ 100
This account is restricted as the user is under 18.

ご覧のとおり、プログラムは最初に新しい ChildBankAccountを定義します。 Bill Appleseedの場合 、そのアカウントは$100を保持します。次に、プログラムは getBalance()を実行します クラスのメソッド。ユーザーの残高を返します。 getBalance() 親クラスBankAccountで宣言されています 、ただし、 ChildBankAccountにアクセスできます 継承を通じて 。

このプログラムは、 isRestricted()も実行します メソッド。18歳未満であるため、子のアカウントが制限されていることを示します。このクラスは、 ChildBankAccountで宣言されています。 ただし、これは、親クラスの BankAccountにはアクセスできないことを意味します。 。制限付きのBankAccountを作成したい場合 、親クラスを変更する必要があります。

親メソッドの再定義

上記の例では、 BankAccountという親クラスを宣言しました。 銀行口座の情報を保存します。 ChildBankAccountという子クラスも作成しました 18歳未満のアカウント所有者の情報を格納します。このクラスは、 BankAccountからメソッドを継承しました。 クラスとisRestricted()も作成しました メソッド。

しかし、既存の親クラスのメソッドを変更したい場合はどうでしょうか。 BankAccountが必要だとします 残高と当座貸越の資格があるというメッセージを含むメッセージを返すための残高 、ただし、これを ChildBankAccountに表示したくない ホルダー。

これを行うには、親メソッドをオーバーライドする必要があります。

改訂された親メソッドBankAccountのコードは次のとおりです。 、アカウント所有者に、残高を確認するときに当座貸越の資格があることを示すメッセージを出力するようになりました。

class BankAccount:
	def __init__(self, forename, surname, balance):
		self.forename = forename
		self.surname = surname
		self.balance = balance

	def getDetails(self):
		print("Forename: ", self.forename)
		print("Surname: ", self.surname)

	def getBalance(self):
		print("Balance: $ ", self.balance)
		print("You are eligible for an overdraft.")

ここで、新しい BankAccountを作成すると John Appleseedの場合 彼の残高を印刷すると、当座貸越の資格がありますというメッセージが表示されます。 。新しいアカウントを宣言し、その残高を確認する例を次に示します。

account = BankAccount("John", "Appleseed", 100)
print(account.getBalance())

コードは次を返します:

Balance: $ 100
You are eligible for an overdraft.

ただし、この変更は、 ChildBankAccountも意味します。 、 BankAccountから値を継承します 、メッセージも表示されます。 ChildBankAccountを作成する例を次に示します。 BankAccount になり、残高を確認します。 親クラスが変更されました:

child_account = ChildBankAccount("Bill", "Appleseed", 100) 
print(child_account.getBalance())

コードは次のようになります:

Balance: $ 100
You are eligible for an overdraft.

通常、子供は当座貸越を許可されていないため、コードを変更する必要があります。そのためには、 ChildBankAccountを変更する必要があります。 クラスを作成し、新しい getBalance()を宣言します 機能。

ChildBankAccountのコードは次のとおりです 上から:

class ChildBankAccount(BankAccount):
	def __init__(self, forename, surname, balance, restricted=True):
self.forename = forename
self.surname = surname
self.balance = balance
self.restricted = restricted

	def isRestricted(self):
		print("This account is restricted as the user is under 18.")

新しい関数を追加するには、次のコードを変更する必要があります: getBalance() 。この関数は、親クラスで宣言した関数と同じように機能しますが、当座貸越に関するメッセージは含まれません。新しい関数を宣言するために追加するコードは次のとおりです。

…

def getBalance(self):
 print("Balance: $ ", self.balance)

今すぐ子供のバランスを取り戻してみましょう:

child_account = ChildBankAccount("Bill", "Appleseed", 100) 
print(child_account.getBalance())

コードは次を返します:

Balance: $ 100

上記の例では、 getBalance()を上書きしています。 ChildBankAccountのメソッド 子クラス。新しいgetBalance() ChildBankAccountのメソッド ユーザーのバランスのみを表示します。しかし、私たちの BankAccount クラス、 getBalance() メソッドは、ユーザーの残高とメッセージ当座貸越の資格がありますの両方を表示します 。

親メソッドのオーバーライドは、親と同様のメソッドを使用する可能性があるが、独自の特定の変更を行う必要がある複数の子メソッドがある場合に役立ちます。上記の場合と同様に、親銀行口座には当座貸越メッセージが表示されますが、子銀行口座には表示されないようにするため、 ChildBankAccountの親メソッドを上書きします。 。

結論

継承は、オブジェクト指向プログラミングで使用され、親クラスですでに宣言されている値を格納できるサブクラスを作成するのに役立ちます。これは、コードを何度も繰り返さずに継承を使用してそれらのクラスを作成できるため、同様の値を格納する同様のクラスを作成する場合に役立ちます。

このチュートリアルでは、Pythonでの継承の役割について説明しました。また、継承と親クラスおよび子クラスがどのように機能するかについても説明し、次に親メソッドをオーバーライドする方法についても説明しました。これで、Pythonエキスパートのようにクラスと継承を操作する準備が整いました!


  1. Pythonインタープリター:ステップバイステップガイド

    Pythonインタープリターは、マシンに正しいバージョンのPythonがインストールされていることを確認しなくてもオンラインで存在するため、Pythonは非常にアクセスしやすく学習できます。この記事では、Pythonインタープリターとは何かについて説明し、オンラインで使用できる、より人気のある、初心者向けのインタープリターをいくつかリストします。 Pythonプログラムはどのように実行されますか? Pythonは、Javaと同様に、インタプリタ言語またはコンパイル言語として完全に分類することはできません。両方のほんの少しです。 この場合にコンパイルされるということは、どの

  2. Pythonでの継承

    この記事では、Python3.xでの継承と拡張クラスについて学習します。またはそれ以前。 継承は実際の関係をうまく表し、再利用性を提供し、推移性をサポートします。開発時間が短縮され、メンテナンスが容易になり、拡張も容易になります。 継承は大きく5つのタイプに分類されます- シングル 複数 階層的 マルチレベル ハイブリッド 上の図に示されているように、継承とは、実際に親クラスのオブジェクトを作成せずに、他のクラスの機能にアクセスしようとするプロセスです。 ここでは、単一の階層型継承の実装について学習します。 単一継承 例 # parent class class Studen