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

Pythonオブジェクト指向プログラミング完全ガイド:クラス、継承、カプセル化、ポリモーフィズム

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

このガイドでは、Pythonのオブジェクト指向プログラミング(OOP)の核心概念を、堅牢で再利用可能なコード構築を示す実践例とともに解説します。

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

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

Pythonは複数のプログラミングスタイルをサポートするマルチパラダイム言語です。最も強力なアプローチの一つは、オブジェクトを使って問題をモデリングすること—いわゆるオブジェクト指向プログラミング(OOP)です。

オブジェクトは2つの本質的特性を持ちます:

例えばオウムは、name、age、colorといった属性と、sing()、dance()といった振る舞いを持つオブジェクトです。

PythonのOOPはDRY(Don't Repeat Yourself)原則に従い、再利用可能なコードを促進します。

クラス

classはオブジェクトの構造と振る舞いを定義する設計図です。オウムの詳細なスケッチのようなもの:オウムが持つプロパティとアクションを指定します。

class Parrot:
    pass

ここではParrotは空のクラスです。このクラスのインスタンスは後で作成されます。

オブジェクト

オブジェクト(インスタンス)はクラスの具体的な実現です。クラス定義時にはメモリは割り当てられず、テンプレートのみ存在します。クラスをインスタンス化するとオブジェクトが作成されます。

obj = Parrot()

以下の例では、機能的なParrotクラスを構築し、bluとwooという2つのインスタンスを作成します:

class Parrot:
    # クラス属性
    species = "bird"
    # インスタンス属性
    def __init__(self, name, age):
        self.name = name
        self.age = age
# クラスをインスタンス化
blu = Parrot("Blu", 10)
woo = Parrot("Woo", 15)
# クラス属性にアクセス
print("Blu is a {}".format(blu.__class__.species))
print("Woo is also a {}".format(woo.__class__.species))
# インスタンス属性にアクセス
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

このスニペットでは、speciesはすべてのオウムで共有されるクラス属性、一方nameとageは各オブジェクト固有のインスタンス属性です。

メソッド

メソッドはクラス内で定義される関数で、オブジェクトの振る舞いを記述します。クラスのインスタンス上で呼び出されます。

class Parrot:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def sing(self, song):
        return f"{self.name} sings {song}"
    def dance(self):
        return f"{self.name} is now dancing"
# インスタンス化してメソッド使用
blu = Parrot("Blu", 10)
print(blu.sing("'Happy'"))
print(blu.dance())

出力

Blu sings 'Happy' Blu is now dancing

継承

継承により、新しいクラスが既存クラスの属性とメソッドを継承でき、コード再利用と論理的階層を促進します。

# 基底クラス
class Bird:
    def __init__(self):
        print("Bird is ready")
    def whoisThis(self):
        print("Bird")
    def swim(self):
        print("Swim faster")
# 派生クラス
class Penguin(Bird):
    def __init__(self):
        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

カプセル化

カプセル化はオブジェクトの内部状態への直接アクセスを制限し、データ整合性を保護します。Pythonでは、プライベート属性を先頭アンダースコア(シングルまたはダブル)で表記します。

class Computer:
    def __init__(self):
        self.__maxprice = 900
    def sell(self):
        print(f"Selling Price: {self.__maxprice}")
    def setMaxPrice(self, price):
        self.__maxprice = price
c = Computer()
c.sell()
# 直接変更を試みる
c.__maxprice = 1000
c.sell()
# セッターメソッド使用
c.setMaxPrice(1000)
c.sell()

出力

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

ポリモーフィズム

ポリモーフィズムにより、異なるクラスのオブジェクトを共通インターフェースで扱え、多様なオブジェクトタイプで動作する柔軟なコードが書けます。

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")
# 共通インターフェース
def flying_test(bird):
    bird.fly()
blu = Parrot()
peggy = Penguin()
flying_test(blu)
flying_test(peggy)

出力

Parrot can fly Penguin can't fly

重要なポイント

Python

  1. Raspberry PiとOpenCVによる自動ビジョンベース物体追跡
  2. C# クラスとオブジェクト:堅牢な OOP の基礎
  3. Python データ型マスター: 実践ガイド
  4. Python 演算子完全マスター: 包括的ガイド
  5. Python辞書完全ガイド:作成、操作、高度なテクニック
  6. Pythonカスタム例外マスター:実践ガイド
  7. Python継承マスター:概念、構文、実践例
  8. Pythonオブジェクト指向プログラミング完全ガイド:クラスと継承をマスター
  9. Javaシングルトンパターン完全解説:安全な実装と活用法
  10. Javaオブジェクトとクラス:コアOOP概念を完全理解
  11. Javaオブジェクト直列化: オブジェクトの持続化と復元(Serializable/transient/ObjectOutputStream)