【Python】クラスの拡張

【Python】クラスの拡張

継承を用いたクラスの拡張

継承を使用すると、既存のクラスの機能を再利用しながら、新しい機能を追加できます。

基本的な継承の例

class Animal:
    def speak(self):
        return "何かの音を出します"

class Dog(Animal):
    def speak(self):
        return "ワンワン!"

dog = Dog()
print(dog.speak())  # 出力: ワンワン!

スーパークラスのメソッドを活用

class Cat(Animal):
    def speak(self):
        return super().speak() + "(猫は通常ニャーと鳴く)"

cat = Cat()
print(cat.speak())  # 出力: 何かの音を出します(猫は通常ニャーと鳴く)

ミックスインを用いたクラスの拡張

ミックスイン(Mixin)は、特定の機能を別のクラスに追加するために使用されます。

ミックスインの例

class LoggerMixin:
    def log(self, message):
        print(f"[LOG] {message}")

class User(LoggerMixin):
    def __init__(self, name):
        self.name = name

    def greet(self):
        self.log(f"{self.name} が挨拶しました。")
        print(f"こんにちは、{self.name}です!")

user = User("田中")
user.greet()
# 出力:
# [LOG] 田中 が挨拶しました。
# こんにちは、田中です!

デコレーターを用いたクラスの拡張

デコレーターを使うと、クラスの動作を柔軟に拡張できます。

クラスデコレーターの例

def add_greeting(cls):
    class NewClass(cls):
        def greet(self):
            print("こんにちは!")
    return NewClass

@add_greeting
class Person:
    def __init__(self, name):
        self.name = name

p = Person("佐藤")
p.greet()  # 出力: こんにちは!

コンポジションを用いたクラスの拡張

コンポジション(Composition)は、「クラスの中に別のクラスを含める」方法です。

コンポジションの例

class Engine:
    def start(self):
        print("エンジンを始動します。")

class Car:
    def __init__(self):
        self.engine = Engine()

    def drive(self):
        self.engine.start()
        print("車が走り出しました。")

car = Car()
car.drive()
# 出力:
# エンジンを始動します。
# 車が走り出しました。

メタクラスを用いたクラスの拡張

メタクラスを使うと、クラスの定義そのものを変更できます。

メタクラスの例

class CustomMeta(type):
    def __new__(cls, name, bases, class_dict):
        class_dict["created_by"] = "CustomMeta"
        return super().__new__(cls, name, bases, class_dict)

class MyClass(metaclass=CustomMeta):
    pass

print(MyClass.created_by)  # 出力: CustomMeta

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です