例:
class Dog: # The constructor method def __init__(self, name, breed): self.name = name # Attribute self.breed = breed # Method (function in the class) def bark(self): print(f"{self.name} says woof!") # Creating an object of the Dog class dog1 = Dog("Buddy", "Golden Retriever") dog1.bark() # Output: Buddy says woof!
ここで、Dog はクラス (ブループリント)、dog1 はこのブループリントから作成されたオブジェクトです。
カプセル化とは、データを安全に保ち、制御された方法でのみデータとのやり取りを許可することです。 プライベート 属性 (接頭辞 _ または __ を付ける) を使用することで、それらの属性に直接アクセスできないようにします。
例:
class BankAccount: def __init__(self, balance): self.__balance = balance # Private attribute def deposit(self, amount): self.__balance += amount def get_balance(self): return self.__balance account = BankAccount(100) account.deposit(50) print(account.get_balance()) # Output: 150
__balance はプライベートであるため、deposit() メソッドと get_balance() メソッドを通じてのみ操作します。
継承により、クラス (子) が別のクラス (親) から属性とメソッドを派生できるようになり、コードの再利用が可能になり、自然な階層が作成されます。
例:
class Animal: def __init__(self, name): self.name = name def make_sound(self): pass class Dog(Animal): def make_sound(self): return "Woof!" class Cat(Animal): def make_sound(self): return "Meow!" dog = Dog("Buddy") cat = Cat("Whiskers") print(dog.make_sound()) # Output: Woof! print(cat.make_sound()) # Output: Meow!
ここで、Dog と Cat は Animal から継承しています。つまり、共通のプロパティと動作を共有できますが、メソッドのオーバーライドを通じて独自の動作も持つことができます。
ポリモーフィズムにより、メソッドを呼び出すオブジェクトに応じてメソッドの実行が異なります。これは、子クラスのメソッドをオーバーライドする場合など、各サブクラスが独自の方法で動作を実装できる場合に便利です。
例:
class Shape: def area(self): pass class Square(Shape): def __init__(self, side): self.side = side def area(self): return self.side * self.side class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius * self.radius shapes = [Square(4), Circle(3)] for shape in shapes: print(shape.area())
同じメソッド名 area() を共有している場合でも、各図形はその面積を異なる方法で計算します。これは実際のポリモーフィズムです。
抽象化は、重要な機能のみを表示し、複雑な詳細を隠すことに重点を置いています。多くの場合、抽象クラス または インターフェイス (Python の abc モジュールを使用) を使用して実現されます。
例:
from abc import ABC, abstractmethod class Vehicle(ABC): @abstractmethod def start_engine(self): pass class Car(Vehicle): def start_engine(self): return "Car engine started!" class Motorcycle(Vehicle): def start_engine(self): return "Motorcycle engine started!" car = Car() motorcycle = Motorcycle() print(car.start_engine()) # Output: Car engine started! print(motorcycle.start_engine()) # Output: Motorcycle engine started!
ここで、Vehicle は start_engine を定義する抽象クラスですが、実装はしません。 Car クラスと Motorcycle クラスは特定の実装を提供するため、各車両タイプに関連する動作のみに焦点を当てることができます。
これらの OOP 原則 (カプセル化、継承、ポリモーフィズム、抽象化) を習得すると、単にコードを書くだけではなくなります。構造、明瞭さ、効率性を備えたシステム全体を設計しているのです。
Python の「クールな建築家」クラブへようこそ。 ??「
」以上が実際の例を使用して、Python の **オブジェクト指向プログラミング (OOP)** の原則と概念を詳しく見てみましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。