Gibt es einen Verweis auf eine Methode, um zu überprüfen, ob die Methode an ein Objekt gebunden ist oder nicht? Können Sie auch auf die Instanz zugreifen, an die sie gebunden ist?Wie überprüfen Sie, ob eine Python-Methode gebunden ist oder nicht?
Antwort
def isbound(method):
return method.im_self is not None
def instance(bounded_method):
return bounded_method.im_self
Wenn ein Benutzer definierten Verfahrens Objekt durch Abrufen eines benutzerdefinierten erstellt wird Funktionsobjekt aus einer Klasse, seine
im_self
Attribut istNone
und das Methodenobjekt wird als ungebunden bezeichnet. Wenn man durch Abfrage ein benutzerdefinierte Funktion Objekt aus einer Klasse über einen seines Fall seinesim_self
Attribut ist die Instanz erzeugt wird, und das Verfahren Objekt gesagt gebunden zu sein. In jedem Fall wird die Neue Methodeim_class
Attribut ist die Klasse von welcher der Abruf erfolgt, und seinim_func
Attribut ist das ursprüngliche Funktionsobjekt.
In Python 2.6 and 3.0:
Instance Verfahren Objekte haben neue Attribute für das Objekt und die Funktion das Verfahren umfasst: das neue Synonym für
im_self
ist__self__
, undim_func
ist auch als__func__
verfügbar. Die alten Namen werden weiterhin in Python 2.6 unterstützt, sind aber in 3.0 verschwunden.
im_self attribute (nur Python 2)
in Python 3 Das __self__
Attribut ist nur Auf gebundenen Methoden. Es ist nicht auf None
auf einfache Funktionen (oder ungebundene Methoden, die einfach Funktionen in Python 3 sind) festgelegt.
Verwendung so etwas wie dieses:
def is_bound(m):
return hasattr(m, '__self__')
Verbindung unterbrochen. – jjmontes