問題一覧に戻る
上級高度なパターン
問題110: メタクラス入門
メタクラスは「クラスのクラス」で、クラスの生成や振る舞いを制御します。typeを継承してメタクラスを作成し、metaclass引数で指定します。__call__メソッドをオーバーライドすることで、インスタンス生成を制御できます。シングルトンパターンなどの実装に使用されます。
# メタクラス入門
class SingletonMeta():
_instances = {}
def (cls, name, bases, dct):
instance = super().__call__(name, bases, dct)
cls._instances[name] = instance
return instance
# メタクラスを使用
class Database(=SingletonMeta):
def __init__(self):
self.connected = True
# シングルトンをテスト
db1 = Database()
db2 = Database()
print(db1 db2)