कोई जांच कैसे कर सकता है कि एक चर एक उदाहरण विधि है या नहीं? मैं अजगर 2.5 का उपयोग कर रहा हूँ।पायथन: मान लें कि वेरिएबल उदाहरण विधि है?
कुछ इस तरह:
class Test:
def method(self):
pass
assert is_instance_method(Test().method)
कोई जांच कैसे कर सकता है कि एक चर एक उदाहरण विधि है या नहीं? मैं अजगर 2.5 का उपयोग कर रहा हूँ।पायथन: मान लें कि वेरिएबल उदाहरण विधि है?
कुछ इस तरह:
class Test:
def method(self):
pass
assert is_instance_method(Test().method)
inspect.ismethod
वह है जो आप जानना चाहते हैं कि आपके पास निश्चित रूप से कोई तरीका है, बल्कि आप जो कुछ भी कॉल कर सकते हैं उसके बजाए।
import inspect
def foo(): pass
class Test(object):
def method(self): pass
print inspect.ismethod(foo) # False
print inspect.ismethod(Test) # False
print inspect.ismethod(Test.method) # True
print inspect.ismethod(Test().method) # True
print callable(foo) # True
print callable(Test) # True
print callable(Test.method) # True
print callable(Test().method) # True
callable
सच है अगर तर्क तर्क एक विधि, (lambda
रों सहित) एक समारोह, __call__
या एक वर्ग के साथ एक उदाहरण है यदि।
विधियों के कार्यों की तुलना में अलग-अलग गुण होते हैं (जैसे im_class
और im_self
)। तो आप
assert inspect.ismethod(Test().method)
+1, निरीक्षण अच्छा है (और वह "defiantly" टाइपो वास्तव में अच्छी तरह से पढ़ता है ;-)। –
http://www.d-e-f-i-n-i-t-e-l-y.com/ :-) –
पायथन 3.5 का उपयोग करके, 'inspect.ismethod (test.method)' झूठा रिटर्न देता है। – Devin
आप अगर यह ठीक एक उदाहरण विधि निम्नलिखित फ़ंक्शन का उपयोग है जानना चाहते हैं। (यह तरीकों कि एक metaclass पर परिभाषित और एक वर्ग वर्ग तरीकों पर पहुंचा जा सकता है समझता है, हालांकि वे भी उदाहरण तरीकों पर विचार किया जा सकता है)
import types
def is_instance_method(obj):
"""Checks if an object is a bound method on an instance."""
if not isinstance(obj, types.MethodType):
return False # Not a method
if obj.im_self is None:
return False # Method is not bound
if issubclass(obj.im_class, type) or obj.im_class is types.ClassType:
return False # Method is a classmethod
return True
आमतौर पर उस के लिए जाँच एक बुरा विचार है। किसी भी कॉल करने योग्य() विधियों के साथ एक दूसरे के साथ उपयोग करने में सक्षम होने के लिए यह अधिक लचीला है।
यहां पूछने में क्या गलत है? – quano
स्रोत पढ़ना कोई मदद नहीं है - संभवतः वह कुछ कोड लिख रहा है जिसे रनटाइम पर जवाब जानने की आवश्यकता है। उदाहरण के लिए, किसी वस्तु पर सभी attrs के माध्यम से संभवतः पुनरावृत्ति। –