Python3でクラスを構築してオブジェクトを定義する方法
序章
Pythonはオブジェクト指向プログラミング言語です。 オブジェクト指向プログラミング(OOP)は、明示的なシーケンス命令に焦点を当てる手続き型プログラミングとは対照的に、コードの再利用可能なパターンの作成に焦点を当てています。 特に複雑なプログラムで作業する場合、オブジェクト指向プログラミングを使用すると、コードを再利用して、より読みやすいコードを記述できるため、保守が容易になります。
オブジェクト指向プログラミングで最も重要な概念の1つは、クラスとオブジェクトの区別です。これらは次のように定義されます。
- Class —オブジェクトのプログラマーによって作成された青写真。 これは、このクラスからインスタンス化されるオブジェクトを特徴付ける一連の属性を定義します。
- Object —クラスのインスタンス。 これは、クラスの実現バージョンであり、クラスはプログラムに明示されています。
これらは、パターンを作成し(クラスの場合)、パターンを利用するために使用されます(オブジェクトの場合)。
このチュートリアルでは、クラスの作成、オブジェクトのインスタンス化、コンストラクターメソッドを使用した属性の初期化、および同じクラスの複数のオブジェクトの操作について説明します。
前提条件
Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)
クラス
クラスは、オブジェクトの作成に使用するために定義できる青写真またはプロトタイプのようなものです。
を使用してクラスを定義します class
キーワード、関数の定義と同様に def
キーワード。
情報:このチュートリアルのサンプルコードに従うには、ローカルシステムでPythonインタラクティブシェルを開いて、 python3
指図。 次に、例の後に追加して、例をコピー、貼り付け、または編集できます。 >>>
促す。
と呼ばれるクラスを定義しましょう Shark
これには2つの機能が関連付けられています。1つは水泳用、もう1つは素晴らしい機能です。
class Shark:
def swim(self):
print("The shark is swimming.")
def be_awesome(self):
print("The shark is being awesome.")
これらの関数はクラスの下にインデントされているため Shark
、それらはメソッドと呼ばれます。 Methods は、クラス内で定義される特殊な種類の関数です。
これらの関数への引数は単語です self
、これは、このクラスに基づいて作成されたオブジェクトへの参照です。 クラスのインスタンス(またはオブジェクト)を参照するには、 self
常に最初のパラメータになりますが、それだけである必要はありません。
このクラスを定義しても、何も作成されませんでした Shark
オブジェクト、パターンのみ Shark
後で定義できるオブジェクト。 つまり、この段階で上記のプログラムを実行しても、何も返されません。
の作成 Shark
上記のクラスは、オブジェクトの青写真を提供してくれました。
オブジェクト
オブジェクトはクラスのインスタンスです。 私たちは取ることができます Shark
上で定義したクラスを使用して、そのオブジェクトまたはインスタンスを作成します。
作ります Shark
と呼ばれるオブジェクト sammy
:
sammy = Shark()
ここでは、オブジェクトを初期化しました sammy
クラスのインスタンスとして、次のように設定します Shark()
.
それでは、2つの方法を使用してみましょう。 Shark
物体 sammy
:
sammy = Shark()
sammy.swim()
sammy.be_awesome()
The Shark
物体 sammy
2つの方法を使用しています swim()
と be_awesome()
. ドット演算子を使用してこれらを呼び出しました(.
)、これはオブジェクトの属性を参照するために使用されます。 この場合、属性はメソッドであり、関数を使用して呼び出す方法と同様に、括弧を使用して呼び出されます。
キーワードだから self
で定義されているメソッドのパラメータでした Shark
クラス、 sammy
オブジェクトがメソッドに渡されます。 The self
パラメータは、メソッドがオブジェクト属性を参照する方法を持っていることを保証します。
ただし、メソッドを呼び出すと、オブジェクトである括弧内には何も渡されません。 sammy
ドット演算子で自動的に渡されます。
プログラムのコンテキスト内にオブジェクトを追加しましょう。
class Shark:
def swim(self):
print("The shark is swimming.")
def be_awesome(self):
print("The shark is being awesome.")
def main():
sammy = Shark()
sammy.swim()
sammy.be_awesome()
if __name__ == "__main__":
main()
プログラムを実行して、その機能を確認してみましょう。
- python shark.py
OutputThe shark is swimming.
The shark is being awesome.
オブジェクト sammy
の2つのメソッドを呼び出します main()
プログラムの機能により、これらのメソッドが実行されます。
コンストラクターメソッド
コンストラクターメソッドは、データを初期化するために使用されます。 クラスのオブジェクトがインスタンス化されるとすぐに実行されます。 別名 __init__
メソッドの場合、これはクラスの最初の定義になり、次のようになります。
class Shark:
def __init__(self):
print("This is the constructor method.")
上記を追加した場合 __init__
方法 Shark
上記のプログラムのクラスの場合、プログラムは、内部で何も変更せずに次のように出力します。 sammy
インスタンス化:
OutputThis is the constructor method.
The shark is swimming.
The shark is being awesome.
これは、コンストラクターメソッドが自動的に初期化されるためです。 このメソッドを使用して、クラスオブジェクトで実行する初期化を実行する必要があります。
上記のコンストラクターメソッドを使用する代わりに、 name
オブジェクトに名前を割り当てるために使用できる変数。 合格します name
パラメータとして設定します self.name
に等しい name
:
class Shark:
def __init__(self, name):
self.name = name
次に、次のように、名前を参照するように関数内の文字列を変更できます。
class Shark:
def __init__(self, name):
self.name = name
def swim(self):
# Reference the name
print(self.name + " is swimming.")
def be_awesome(self):
# Reference the name
print(self.name + " is being awesome.")
最後に、名前を設定できます Shark
物体 sammy
に等しい "Sammy"
のパラメータとして渡すことによって Shark
クラス:
class Shark:
def __init__(self, name):
self.name = name
def swim(self):
print(self.name + " is swimming.")
def be_awesome(self):
print(self.name + " is being awesome.")
def main():
# Set name of Shark object
sammy = Shark("Sammy")
sammy.swim()
sammy.be_awesome()
if __name__ == "__main__":
main()
これでプログラムを実行できます。
- python shark.py
OutputSammy is swimming.
Sammy is being awesome.
オブジェクトに渡した名前が印刷されていることがわかります。 を定義しました __init__
パラメータ名を持つメソッド(および self
キーワード)およびメソッド内で変数を定義しました。
コンストラクターメソッドは自動的に初期化されるため、明示的に呼び出す必要はありません。クラスの新しいインスタンスを作成するときに、クラス名に続く括弧内の引数を渡すだけです。
次のような別のパラメータを追加したい場合 age
、それをに渡すことによってもそうすることができます __init__
方法:
class Shark:
def __init__(self, name, age):
self.name = name
self.age = age
次に、オブジェクトを作成するとき sammy
、私たちは私たちの声明でサミーの年齢を渡すことができます:
sammy = Shark("Sammy", 5)
利用するには age
、それを呼び出すクラスにもメソッドを作成する必要があります。
コンストラクターメソッドを使用すると、オブジェクトの特定の属性を初期化できます。
複数のオブジェクトの操作
クラスは、同じ青写真に基づいて多くの同様のオブジェクトを作成できるので便利です。
これがどのように機能するかを理解するために、別のものを追加しましょう Shark
私たちのプログラムに反対する:
class Shark:
def __init__(self, name):
self.name = name
def swim(self):
print(self.name + " is swimming.")
def be_awesome(self):
print(self.name + " is being awesome.")
def main():
sammy = Shark("Sammy")
sammy.be_awesome()
stevie = Shark("Stevie")
stevie.swim()
if __name__ == "__main__":
main()
私たちは2番目を作成しました Shark
と呼ばれるオブジェクト stevie
名前を渡しました "Stevie"
それに。 この例では、 be_awesome()
との方法 sammy
そしてその swim()
との方法 stevie
.
プログラムを実行してみましょう:
- python shark.py
OutputSammy is being awesome.
Stevie is swimming.
出力は、2つの異なるオブジェクトを使用していることを示しています。 sammy
オブジェクトと stevie
オブジェクト、両方 Shark
クラス。
クラスを使用すると、各オブジェクトを最初から作成しなくても、同じパターンに従って複数のオブジェクトを作成できます。
結論
このチュートリアルでは、クラスの作成、オブジェクトのインスタンス化、コンストラクターメソッドを使用した属性の初期化、および同じクラスの複数のオブジェクトの操作について説明しました。
オブジェクト指向プログラミングは、あるプログラム用に作成されたオブジェクトを別のプログラムで使用できるため、コードの再利用を可能にするため、理解するための重要な概念です。 オブジェクト指向プログラムは、複雑なプログラムを作成するのが難しく、慎重な計画が必要なため、プログラムの設計を改善します。これにより、プログラムを長期間維持する作業が少なくなります。