問題一覧に戻る
上級高度なパターン
問題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)