decorator
爲什麼不裝飾靜態方法或類方法?爲什麼@decorator不能裝飾靜態方法或類方法?
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'
兩個get_dir
和get_a
結果AttributeError: <'classmethod' or 'staticmethod'>, object has no attribute '__name__'
。
爲什麼在屬性__name__
而不是屬性func_name
依賴decorator
? (Afaik的所有功能,包括類方法和靜態方法,都具有func_name
屬性。)
編輯:我正在使用Python 2.6。
內部裝飾你爲什麼要調用函數(*參數)?它的工作就是簡單地返回一個函數(在你的情況下,未修改)。 – gahooa 2010-01-01 05:22:17
gahooa:因爲這是「裝飾者」(他輸入的內容,而不是語言結構)的一種方式,請參閱http://pypi.python.org/pypi/decorator。 – 2010-01-01 06:28:24
@taldor你有裝飾模塊在Python 2.6? – mykhal 2010-01-04 10:41:55