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:

  • Python unittest - durchsetzendes Wörterbuch mit Listen
  • Wie behaupte ich, dass ein Funktionsaufruf keinen Fehler mit unittest zurückgibt?
  • Python-Skript läuft mit mpirun nicht stoppen, wenn beweis auf Prozessor 0 fehlschlägt
  • Python behauptet mit -O
  • Python's `assert` machen eine Ausnahme, die ich wähle
  • Sperren einer Methode außerhalb einer Klasse
  • class Test: def method(self): pass assert is_instance_method(Test().method) 

  • Lokale Variablen in Python verschachtelten Funktionen
  • Wie funktionieren geschachtelte Funktionen in Python?
  • Verschachtelte Funktion in Python
  • Warum sind nicht python verschachtelte Funktionen genannt Schließungen?
  • Funktion innen Funktion - jedes Mal?
  • Übergeben von Argument aus der übergeordneten Funktion in die verschachtelte Funktion 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.