कक्षा परिभाषित करने के बाद आप क्लास विधि स्थैतिक कैसे बना सकते हैं? दूसरे शब्दों में, तीसरा मामला क्यों विफल रहता है?कक्षा के बाहर किसी मौजूदा विधि से staticmethod बनाएँ? ("अनबाउंड विधि" त्रुटि)
>>> class b: ... @staticmethod ... def foo(): ... pass ... >>> b.foo() >>> class c: ... def foo(): ... pass ... foo = staticmethod(foo) ... >>> c.foo() >>> class d: ... def foo(): ... pass ... >>> d.foo = staticmethod(d.foo) >>> d.foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unbound method foo() must be called with d instance as first argument (got nothing instead)
क्या यह 'd.foo.im_func' नहीं होना चाहिए? –
हां, धन्यवाद। फिक्स्ड! – kindall
ठीक है, आपको उन्हें केवल 'वर्ग' के साथ चिह्नित करने के लिए उन्हें 'staticmethod'' के साथ चिह्नित करने की आवश्यकता है। 'd.foo()' 'staticmethod' wrapping के साथ या उसके बिना काम करता है, लेकिन' d()। foo() 'विस्फोट करेगा (यह 'स्वयं' को पार करने का प्रयास करेगा जो 'foo' स्वीकार नहीं करता है)। निश्चित रूप से, कोई उदाहरण-संबंधित सुविधा नहीं है जिसे उन्हें किसी उदाहरण पर कॉल करने की आवश्यकता होगी, लेकिन DRY के लिए, स्थिर विधि का संदर्भ देने वाली विधियां इसे कक्षा के नामकरण के बजाय 'self.foo()' के रूप में कॉल कर सकती हैं। – ShadowRanger