Neden decorator
bir staticmethod veya classmethod'u süslemez?@decorator neden bir staticmethod veya bir classmethod süslemez?
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'
Hem
get_dir
ve AttributeError: <'classmethod' or 'staticmethod'>, object has no attribute '__name__'
içinde get_a
sonuç.
func_name
özniteliği yerine __name__
özniteliğinde decorator
neden bağımlıdır? (Aqaik sınıf yöntemleri ve staticmethods dahil tüm işlevler func_name
özniteliğine sahiptir.)
Düzenleme: Python 2.6 kullanıyorum.
Neden aradığınız fonksiyonu (* args): Bunun gibi
? Bu iş sadece bir işlevi döndürmektir (sizin durumunuzda, değiştirilmemiş). – gahooa
gahooa: Bu bir şekilde 'dekoratör' (dil yapısını değil, içe aktardığı) çalışır, bkz. Http://pypi.python.org/pypi/decorator. –
@taldor 2.6'da dekoratör modülünüz var mı? – mykhal