decorator
क्यों एक staticmethod या एक classmethod सजाने नहीं कर सकते हैं?@ डिकोरेटर एक staticmethod या 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'
दोनों get_dir
और AttributeError: <'classmethod' or 'staticmethod'>, object has no attribute '__name__'
में get_a
परिणाम।
विशेषता func_name
विशेषता के बजाय __name__
विशेषता पर decorator
क्यों निर्भर करता है? (क्लासिक विधिओं और staticmethods सहित सभी कार्यों, func_name
विशेषता है।)
संपादित करें: मैं पायथन 2.6 का उपयोग कर रहा हूं।
तुम क्यों बुला रहे हैं समारोह (* args) डेकोरेटर अंदर:
इस तरह? यह काम केवल एक समारोह (अपने मामले में, unmodified) वापस करने के लिए है। – gahooa
गहुआ: क्योंकि यह एक तरीका है 'सजावट' (वह जो आयात करता है, भाषा निर्माण नहीं करता) काम करता है, http://pypi.python.org/pypi/decorator देखें। –
@taldor आपके पास py 2.6 में सजावटी मॉड्यूल है? – mykhal