tôi đã đưa ra đoạn mã sau để trang trí các phương pháp dụ sử dụng một trang trí đòi hỏi thể hiện chính nó như là một cuộc tranh cãi:Python: Bất cứ điều gì sai trái với tự động gán các phương pháp dụ như dụ thuộc tính
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()
Điều này dường như công việc tuyệt vời , nhưng tôi sợ rằng tôi có thể đã bỏ qua một số tác dụng phụ không mong muốn của thủ thuật này. Tôi có muốn tự bắn mình vào chân hay điều này an toàn không?
Lưu ý rằng tôi không thực sự muốn sử dụng tính năng này để ghi nhật ký, đó chỉ là ví dụ ngắn nhất có ý nghĩa mà tôi có thể đưa ra.
Dường như hợp pháp. Imho. – Evpok