【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