Python 3でクラスを構築してオブジェクトを定義する方法

前書き

Pythonはオブジェクト指向プログラミング言語です。 オブジェクト指向プログラミング(OOP)は、明示的なシーケンス命令に焦点を当てた手続き型プログラミングとは対照的に、コードの再利用可能なパターンの作成に焦点を当てています。 特に複雑なプログラムで作業する場合、オブジェクト指向プログラミングを使用すると、コードを再利用して読みやすいコードを作成できるため、メンテナンスが容易になります。

オブジェクト指向プログラミングで最も重要な概念の1つは、次のように定義されているクラスとオブジェクトの区別です。

  • クラス-プログラマーがオブジェクト用に作成した設計図。 これは、このクラスからインスタンス化されるオブジェクトを特徴付ける一連の属性を定義します。

  • オブジェクト-クラスのインスタンス。 これは、クラスがプログラムで明示されるクラスの実現バージョンです。

これらは、パターンを作成し(クラスの場合)、次にパターンを使用する(オブジェクトの場合)ために使用されます。

このチュートリアルでは、クラスの作成、オブジェクトのインスタンス化、コンストラクターメソッドを使用した属性の初期化、および同じクラスの複数のオブジェクトの操作について説明します。

クラス

クラスは、オブジェクトの作成に使用するために定義できる設計図またはプロトタイプのようなものです。

「+ class 」キーワードを使用してクラスを定義します。https://www.digitalocean.com/community/tutorials/how-to-define-functions-in-python-3 [関数の定義] ` def +`キーワード。

「+ Shark +」というクラスを定義してみましょう。このクラスには、水泳用とすごいもの用の2つの機能が関連付けられています。

shark.py

class Shark:
   def swim(self):
       print("The shark is swimming.")

   def be_awesome(self):
       print("The shark is being awesome.")

これらの関数はクラス `+ Shark +`でインデントされているため、メソッドと呼ばれます。 *メソッド*は、クラス内で定義される特別な種類の関数です。

これらの関数の引数は「+ self 」という単語で、このクラスに基づいて作成されるオブジェクトへの参照です。 クラスのインスタンス(またはオブジェクト)を参照するには、 ` self +`が常に最初のパラメーターになりますが、唯一のパラメーターである必要はありません。

このクラスを定義しても、 `+ Shark `オブジェクトは作成されず、後で定義できる ` Shark +`オブジェクトのパターンのみが作成されました。 つまり、この段階で上記のプログラムを実行すると、何も返されません。

上記の `+ Shark +`クラスを作成すると、オブジェクトの青写真が提供されました。

オブジェクト

オブジェクトはクラスのインスタンスです。 上記で定義した `+ Shark +`クラスを取得し、それを使用してオブジェクトまたはそのインスタンスを作成できます。

`+ sammy `と呼ばれる ` Shark +`オブジェクトを作成します。

sammy = Shark()

ここでは、オブジェクトの `+ sammy `を ` Shark()+`と等しく設定することにより、クラスのインスタンスとして初期化しました。

それでは、 `+ Shark `オブジェクト ` sammy +`で2つのメソッドを使用してみましょう。

sammy = Shark()
sammy.swim()
sammy.be_awesome()

+ Shark +`オブジェクト `+ sammy +`は、2つのメソッド `+ swim()+`と `+ be_awesome()+`を使用しています。 オブジェクトの属性を参照するために使用されるドット演算子( `+。+)を使用してこれらを呼び出しました。 この場合、属性はメソッドであり、関数で呼び出す方法と同様に、括弧で呼び出されます。

キーワード「+ self 」は「 Shark 」クラスで定義されているメソッドのパラメーターであるため、「 sammy 」オブジェクトがメソッドに渡されます。 ` self +`パラメータは、メソッドがオブジェクト属性を参照する方法を持っていることを保証します。

ただし、メソッドを呼び出すと、括弧内に何も渡されず、オブジェクト `+ sammy +`がドット演算子で自動的に渡されます。

プログラムのコンテキスト内にオブジェクトを追加しましょう。

shark.py

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 `はプログラムの ` main()+`関数の2つのメソッドを呼び出し、これらのメソッドを実行します。

コンストラクターメソッド

コンストラクターメソッドは、データを初期化するために使用されます。 クラスのオブジェクトがインスタンス化されるとすぐに実行されます。 `+ init +`メソッドとも呼ばれ、クラスの最初の定義になり、次のようになります。

class Shark:
   def __init__(self):
       print("This is the constructor method.")

上記のプログラムの `+ Shark `クラスに上記の ` init `メソッドを追加した場合、プログラムは ` sammy +`インスタンス化内で何も変更せずに以下を出力します。

OutputThis is the constructor method.
The shark is swimming.
The shark is being awesome.

これは、コンストラクターメソッドが自動的に初期化されるためです。 このメソッドを使用して、クラスオブジェクトで行う初期化を実行する必要があります。

上記のコンストラクターメソッドを使用する代わりに、オブジェクトに名前を割り当てるために使用できる「+ name 」変数を使用するコンストラクターを作成しましょう。 パラメータとして「 name 」を渡し、「 self.name 」を「 name +」に設定します。

shark.py

class Shark:
   def __init__(self, name):
       self.name = name

次に、関数の文字列を変更して、次のように名前を参照できます。

shark.py

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 `クラスのパラメーターとして渡すことにより、 ` Shark `オブジェクトの名前 ` sammy `を `" Sammy "+`に等しく設定できます。

shark.py

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’s」を作成するときに、Sammyの年齢をステートメントで渡すことができます。

sammy = Shark("Sammy", 5)

`+ age +`を利用するには、それを呼び出すクラスでメソッドを作成する必要があります。

コンストラクターメソッドを使用すると、オブジェクトの特定の属性を初期化できます。

複数のオブジェクトの使用

クラスは、同じ設計図に基づいて多くの同様のオブジェクトを作成できるため、便利です。

この仕組みを理解するために、プログラムに別の `+ Shark +`オブジェクトを追加しましょう。

shark.py

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()

`+ stevie `と呼ばれる2番目の ` Shark `オブジェクトを作成し、それに名前 `" Stevie "`を渡しました。 この例では、 ` sammy `で ` be_awesome()`メソッドを使用し、 ` stevie `で ` swim()+`メソッドを使用しました。

プログラムを実行しましょう:

python shark.py
OutputSammy is being awesome.
Stevie is swimming.

出力は、2つの異なるオブジェクト、両方とも `+ Shark `クラスの ` sammy `オブジェクトと ` stevie +`オブジェクトを使用していることを示しています。

クラスを使用すると、各パターンを最初から作成することなく、同じパターンに従って複数のオブジェクトを作成できます。

結論

このチュートリアルでは、クラスの作成、オブジェクトのインスタンス化、コンストラクターメソッドを使用した属性の初期化、および同じクラスの複数のオブジェクトの操作について説明しました。

オブジェクト指向プログラミングは、あるプログラム用に作成されたオブジェクトを別のプログラムで使用できるため、コードのリサイクルがより簡単になるため、理解する重要な概念です。 また、オブジェクト指向プログラムは、複雑なプログラムを作成するのが難しく、慎重な計画を必要とするため、プログラム設計を改善します。これにより、プログラムを長期にわたって保守する作業が少なくなります。