# メタクラスを用いたログ出力
class LoggingMeta(type):
def __new__(cls, name, bases, dct):
for attr, value in dct.items():
if callable(value):
dct[attr] = cls.wrap_method(value)
return super().__new__(cls, name, bases, dct)
@staticmethod
def wrap_method(method):
def wrapper(*args, **kwargs):
print(f"Method {method.__name__} called.")
return method(*args, **kwargs)
return wrapper
リフレクションを用いた動的メソッド追加
リフレクションを用いて、クラスに動的にメソッドを追加する例です。
# リフレクションを用いた動的メソッド追加
def new_method(self):
print("This is a new method.")
setattr(MyClass, 'new_method', new_method)
obj = MyClass()
obj.new_method() # 出力:This is a new method.
# 設定値を動的に変更
import json
class Configurable:
def __init__(self):
self.setting = "default"
with open('config.json', 'r') as f:
config = json.load(f)
obj = Configurable()
for key, value in config.items():
setattr(obj, key, value)
コメント