を属性として動的にインスタンスメソッドを割り当てるに何か問題は、私は、引数としてインスタンス自体を必要とデコレータを使用してインスタンスメソッドを飾るために、次のコードを思い付いた:Pythonの:インスタンスが
from functools import wraps
def logging_decorator(tricky_instance):
def wrapper(fn):
@wraps(fn)
def wrapped(*a, **kw):
if tricky_instance.log:
print("Calling %s.." % fn.__name__)
return fn(*a, **kw)
return wrapped
return wrapper
class Tricky(object):
def __init__(self, log):
self.log = log
self.say_hi = logging_decorator(self)(self.say_hi)
def say_hi(self):
print("Hello, world!")
i1 = Tricky(log=True)
i2 = Tricky(log=False)
i1.say_hi()
i2.say_hi()
これは素晴らしい動作しているようですしかし、私はこのトリックの意図しない副作用を見逃している可能性があることを恐れています。私は足で自分を撃っているのですか?これは安全ですか?
私は実際にこれをロギングに使用したくないことに注意してください。これは私が思い付くことができる最も短い意味のある例です。
と思われます。私見では。 – Evpok