Python: Bestätigen Sie diese Variable ist Instanzmethode?

Wie kann man überprüfen, ob eine Variable eine Instanzmethode ist oder nicht? Ich benutze Python 2.5.

Etwas wie das:

class Test: def method(self): pass assert is_instance_method(Test().method) 

  • Warum verwenden einige Methoden Punkt Notation und andere nicht?
  • Warum schlägt setattr auf einer gebundenen Methode
  • Python __init__ issue: ungebundene Methode __init __ () muss mit Bankinstanz als erstes Argument aufgerufen werden (stattdessen eine Instanz)
  • Aufruf Multiprocessing in der Klasse Methode Python
  • Wie rufe ich eine bestimmte Methode aus einem Python-Skript in C #?
  • Python - Wie kann ich die Klasse abfragen, in der eine Methode definiert ist?
  • Warum kann ich nicht selbst als benanntes Argument an eine Instanzmethode in Python übergeben?
  • Was ist eine "Methode" in Python?
  • 2 Solutions collect form web for “Python: Bestätigen Sie diese Variable ist Instanzmethode?”

    inspect.ismethod ist, was Sie herausfinden wollen, wenn Sie definitiv eine Methode haben, anstatt nur etwas, das Sie anrufen können.

     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 ist wahr, wenn das Argument, wenn das Argument eine Methode ist, eine Funktion (einschließlich lambda s), eine Instanz mit __call__ oder eine Klasse.

    Methoden haben unterschiedliche Eigenschaften als Funktionen (wie im_class und im_self ). Also du möchtest

     assert inspect.ismethod(Test().method) 

    Wenn Sie wissen wollen, ob es genau eine Instanzmethode ist, verwenden Sie die folgende Funktion. (Es berücksichtigt Methoden, die auf einer Metaklasse definiert sind und auf eine Klasse Klasse Methoden, obwohl sie auch als Instanz Methoden)

     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 

    Normalerweise überprüft das ist eine schlechte Idee. Es ist flexibler, in der Lage zu sein, alle aufrufbaren () austauschbar mit Methoden zu verwenden.

    Python ist die beste Programmiersprache der Welt.