工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

Python オブジェクト指向プログラミング

Python オブジェクト指向プログラミング

このチュートリアルでは、Python のオブジェクト指向プログラミング (OOP) とその基本概念について、例を使って学びます。

ビデオ:Python でのオブジェクト指向プログラミング

オブジェクト指向プログラミング

Python はマルチパラダイムのプログラミング言語です。さまざまなプログラミング アプローチをサポートします。

プログラミングの問題を解決する一般的な方法の 1 つは、オブジェクトを作成することです。これは、オブジェクト指向プログラミング (OOP) として知られています。

オブジェクトには 2 つの特徴があります:

例を見てみましょう:

オウムは次のプロパティを持つオブジェクトです:

Python における OOP の概念は、再利用可能なコードの作成に重点を置いています。この概念は DRY (Don't Repeat Yourself) とも呼ばれます。

Python では、OOP の概念はいくつかの基本原則に従います。


クラス

クラスはオブジェクトの設計図です。

クラスは、ラベルが付いたオウムのスケッチと考えることができます。名前、色、サイズなどの詳細がすべて含まれています。これらの説明に基づいて、オウムについて調べることができます。ここでは、オウムがオブジェクトです。

オウムのクラスの例:

class Parrot:
    pass

ここでは、class を使用します。 空のクラス Parrot を定義するキーワード .クラスから、インスタンスを構築します。インスタンスは、特定のクラスから作成された特定のオブジェクトです。


オブジェクト

オブジェクト (インスタンス) は、クラスのインスタンス化です。クラスが定義されると、オブジェクトの説明のみが定義されます。したがって、メモリやストレージは割り当てられません。

オウム クラスのオブジェクトの例:

obj = Parrot()

ここで、obj クラス Parrot のオブジェクトです .

オウムの詳細があるとします。ここで、オウムのクラスとオブジェクトを構築する方法を示します。

例 1:Python でのクラスとオブジェクトの作成

class Parrot:

    # class attribute
    species = "bird"

    # instance attribute
    def __init__(self, name, age):
        self.name = name
        self.age = age

# instantiate the Parrot class
blu = Parrot("Blu", 10)
woo = Parrot("Woo", 15)

# access the class attributes
print("Blu is a {}".format(blu.__class__.species))
print("Woo is also a {}".format(woo.__class__.species))

# access the instance attributes
print("{} is {} years old".format( blu.name, blu.age))
print("{} is {} years old".format( woo.name, woo.age))

出力

Blu is a bird
Woo is also a bird
Blu is 10 years old
Woo is 15 years old

上記のプログラムでは、Parrot という名前のクラスを作成しました。 .次に、属性を定義します。属性はオブジェクトの特性です。

これらの属性は __init__ 内で定義されます クラスのメソッド。オブジェクトが作成されるとすぐに最初に実行されるのは、初期化メソッドです。

次に、Parrot のインスタンスを作成します クラス。ほら、ブルー そしてウー 新しいオブジェクトへの参照 (値) です。

__class__.species を使用してクラス属性にアクセスできます .クラス属性は、クラスのすべてのインスタンスで同じです。同様に、 blu.name を使用してインスタンス属性にアクセスします および blu.age .ただし、インスタンス属性はクラスのインスタンスごとに異なります。

クラスとオブジェクトの詳細については、Python クラスとオブジェクトをご覧ください


メソッド

メソッドは、クラスの本体内で定義される関数です。これらは、オブジェクトの動作を定義するために使用されます。

例 2 :Python でメソッドを作成する

class Parrot:
    
    # instance attributes
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    # instance method
    def sing(self, song):
        return "{} sings {}".format(self.name, song)

    def dance(self):
        return "{} is now dancing".format(self.name)

# instantiate the object
blu = Parrot("Blu", 10)

# call our instance methods
print(blu.sing("'Happy'"))
print(blu.dance())

出力

Blu sings 'Happy'
Blu is now dancing

上記のプログラムでは、2 つのメソッド、つまり sing() を定義しています。 そして dance() .これらは、インスタンス オブジェクト、つまり blu で呼び出されるため、インスタンス メソッドと呼ばれます。 .


継承

継承は、既存のクラスの詳細を変更せずに使用するために新しいクラスを作成する方法です。新しく形成されたクラスは、派生クラス (または子クラス) です。同様に、既存のクラスは基本クラス (または親クラス) です。

例 3:Python での継承の使用

# parent class
class Bird:
    
    def __init__(self):
        print("Bird is ready")

    def whoisThis(self):
        print("Bird")

    def swim(self):
        print("Swim faster")

# child class
class Penguin(Bird):

    def __init__(self):
        # call super() function
        super().__init__()
        print("Penguin is ready")

    def whoisThis(self):
        print("Penguin")

    def run(self):
        print("Run faster")

peggy = Penguin()
peggy.whoisThis()
peggy.swim()
peggy.run()

出力

Bird is ready
Penguin is ready
Penguin
Swim faster
Run faster

上記のプログラムでは、2 つのクラス、つまり Bird を作成しました。 (親クラス) と ペンギン (子供クラス)。子クラスは親クラスの機能を継承します。これは swim() からわかります メソッド。

ここでも、子クラスが親クラスの動作を変更しました。これは whoisThis() からわかります 方法。さらに、新しい run() を作成して、親クラスの機能を拡張します。 メソッド。

さらに、super() を使用します __init__() 内の関数 方法。これにより、__init__() を実行できます。 子クラス内の親クラスのメソッド。


カプセル化

Python で OOP を使用すると、メソッドと変数へのアクセスを制限できます。これにより、カプセル化と呼ばれるデータの直接変更が防止されます。 Python では、接頭辞としてアンダースコアを使用してプライベート属性を示します。つまり、単一の _ です。 または __ を 2 倍にする .

例 4:Python でのデータのカプセル化

class Computer:

    def __init__(self):
        self.__maxprice = 900

    def sell(self):
        print("Selling Price: {}".format(self.__maxprice))

    def setMaxPrice(self, price):
        self.__maxprice = price

c = Computer()
c.sell()

# change the price
c.__maxprice = 1000
c.sell()

# using setter function
c.setMaxPrice(1000)
c.sell()

出力

Selling Price: 900
Selling Price: 900
Selling Price: 1000

上記のプログラムでは、Computer を定義しました。 クラス。

__init__() を使用しました Computerの最高販売価格を格納するメソッド .ここで、コードに注目してください

c.__maxprice = 1000

ここでは、__maxprice の値を変更しようとしました クラス外。ただし、__maxprice から はプライベート変数です。この変更は出力に表示されません。

示されているように、値を変更するには、セッター関数、つまり setMaxPrice() を使用する必要があります これは価格をパラメーターとして受け取ります。


ポリモーフィズム

ポリモーフィズムは、複数のフォーム (データ型) に共通のインターフェースを使用する (OOP における) 機能です。

形状に色を付ける必要があるとします。複数の形状オプション (長方形、正方形、円) があります。ただし、同じ方法を使用して、任意の形状に色を付けることができます。この概念はポリモーフィズムと呼ばれます。

例 5:Python でポリモーフィズムを使用する

class Parrot:

    def fly(self):
        print("Parrot can fly")
    
    def swim(self):
        print("Parrot can't swim")

class Penguin:

    def fly(self):
        print("Penguin can't fly")
    
    def swim(self):
        print("Penguin can swim")

# common interface
def flying_test(bird):
    bird.fly()

#instantiate objects
blu = Parrot()
peggy = Penguin()

# passing the object
flying_test(blu)
flying_test(peggy)

出力

Parrot can fly
Penguin can't fly

上記のプログラムでは、2 つのクラス Parrot を定義しました。 そしてペンギン .それぞれに共通の fly() があります 方法。ただし、それらの機能は異なります。

ポリモーフィズムを使用するために、共通のインターフェース、つまり flying_test() を作成しました 任意のオブジェクトを受け取り、オブジェクトの fly() を呼び出す関数 方法。したがって、blu を通過したとき そしてペギー flying_test() のオブジェクト


覚えておくべき重要なポイント:


Python

  1. C# クラスとオブジェクト
  2. Python データ型
  3. Python 演算子
  4. Python 辞書
  5. Python カスタム例外
  6. Python の継承
  7. Java シングルトン クラス
  8. 自動ビジョンオブジェクト追跡
  9. Java - オブジェクトとクラス
  10. Java-シリアライゼーション
  11. Python-オブジェクト指向