मुझे पाइथन में एक स्थिर विधि को सजाने में एक छोटी सी समस्या है। मुझे लगता है कि निम्नलिखित कोड मेरी समस्या का सबसे अच्छा प्रतिनिधित्व करता है:पायथन: सजाए गए staticmethod गैर कॉल करने योग्य विधि प्राप्त करता है
def decorator(func):
print callable(func)
return func
class Foo():
@decorator
@staticmethod
def bar():
return
# outputs False
print callable(Foo.bar)
# outputs True
यह एक बग प्रतीत होता है। मुझे लगता है कि यह उठता है क्योंकि जब विधि Foo.bar
सजावटी को पास की जाती है, तो यह एक कार्य है, एक विधि नहीं। यही कारण है कि मैं इसे कॉल करने योग्य नहीं देख सकता, क्योंकि यदि हम एक मानक कार्य को सजाने के लिए कहते हैं, तो यह कॉल करने योग्य नहीं है, जैसा कि नीचे दिखाया गया है।
@staticmethod
def function():
return
print callable(function)
# outputs False
तो यह staticmethod डेकोरेटर के कार्यान्वयन में एक सच्चे बग है, और/या वहाँ किसी भी साधारण कामकाज से जुड़े हैं? मैंने __call__
विशेषता को एग्ग्न करने के लिए एक सजावट लिखने के बारे में सोचा था, लेकिन मुझे नहीं पता कि callable
लागू किया गया है, इसलिए मैं इस तरह की विधि की आवश्यकता को गेज नहीं कर सकता।
ध्यान दें कि आपको 'staticmethod' के लिए नए-शैली वर्गों का उपयोग उदाहरणों पर भी कॉल करने योग्य होना चाहिए, क्योंकि यह वर्णनकर्ताओं का उपयोग करता है। –
इसे काम करने के लिए, बस वर्णनकर्ताओं के क्रम को बदलें। –