序章

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

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

  • Class —オブジェクトのプログラマーによって作成された青写真。 これは、このクラスからインスタンス化されるオブジェクトを特徴付ける一連の属性を定義します。
  • Object —クラスのインスタンス。 これは、クラスの実現バージョンであり、クラスはプログラムに明示されています。

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

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

前提条件

Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)

クラス

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

を使用してクラスを定義します class キーワード、関数の定義と同様に def キーワード。

情報:このチュートリアルのサンプルコードに従うには、ローカルシステムでPythonインタラクティブシェルを開いて、 python3 指図。 次に、例の後に追加して、例をコピー、貼り付け、または編集できます。 >>> 促す。

と呼ばれるクラスを定義しましょう Shark これには2つの機能が関連付けられています。1つは水泳用、もう1つは素晴らしい機能です。

shark.py
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 ドット演算子で自動的に渡されます。

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

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

プログラムを実行して、その機能を確認してみましょう。

  1. python shark.py
Output
The 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 インスタンス化:

Output
This 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 物体 sammy に等しい "Sammy" のパラメータとして渡すことによって 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():
    # Set name of Shark object
    sammy = Shark("Sammy")
    sammy.swim()
    sammy.be_awesome()

if __name__ == "__main__":
    main()

これでプログラムを実行できます。

  1. python shark.py
Output
Sammy 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 私たちのプログラムに反対する:

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

私たちは2番目を作成しました Shark と呼ばれるオブジェクト stevie 名前を渡しました "Stevie" それに。 この例では、 be_awesome() との方法 sammy そしてその swim() との方法 stevie.

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

  1. python shark.py
Output
Sammy is being awesome. Stevie is swimming.

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

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

結論

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

オブジェクト指向プログラミングは、あるプログラム用に作成されたオブジェクトを別のプログラムで使用できるため、コードの再利用を可能にするため、理解するための重要な概念です。 オブジェクト指向プログラムは、複雑なプログラムを作成するのが難しく、慎重な計画が必要なため、プログラムの設計を改善します。これにより、プログラムを長期間維持する作業が少なくなります。