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