Tại sao có thể decorator
không trang trí một staticmethod hoặc một classmethod?Tại sao @decorator không thể trang trí một staticmethod hoặc một classmethod?
from decorator import decorator
@decorator
def print_function_name(function, *args):
print '%s was called.' % function.func_name
return function(*args)
class My_class(object):
@print_function_name
@classmethod
def get_dir(cls):
return dir(cls)
@print_function_name
@staticmethod
def get_a():
return 'a'
Cả get_dir
và get_a
kết quả trong AttributeError: <'classmethod' or 'staticmethod'>, object has no attribute '__name__'
.
Tại sao phải dựa vào decorator
trên thuộc tính __name__
thay vì thuộc tính func_name
? (Afaik tất cả các hàm, bao gồm cả classmethods và staticmethods, có thuộc tính func_name
.)
Chỉnh sửa: Tôi đang sử dụng Python 2.6.
chức năng Tại sao các bạn gọi (* args) bên trong trang trí? Công việc của nó đơn giản là trả về một hàm (trong trường hợp của bạn, chưa sửa đổi). – gahooa
gahooa: bởi vì đó là một cách 'trang trí' (những gì ông nhập khẩu, không phải là ngôn ngữ xây dựng) hoạt động, xem http://pypi.python.org/pypi/decorator. –
@taldor bạn có mô-đun trang trí trong py 2.6? – mykhal