2008-09-10 2 views

Antwort

33
def isbound(method): 
    return method.im_self is not None 

def instance(bounded_method): 
    return bounded_method.im_self 

User-defined methods:

Wenn ein Benutzer definierten Verfahrens Objekt durch Abrufen eines benutzerdefinierten erstellt wird Funktionsobjekt aus einer Klasse, seine im_self Attribut ist None und das Methodenobjekt wird als ungebunden bezeichnet. Wenn man durch Abfrage ein benutzerdefinierte Funktion Objekt aus einer Klasse über einen seines Fall seines im_self Attribut ist die Instanz erzeugt wird, und das Verfahren Objekt gesagt gebunden zu sein. In jedem Fall wird die Neue Methode im_class Attribut ist die Klasse von welcher der Abruf erfolgt, und sein im_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__, und im_func ist auch als __func__ verfügbar. Die alten Namen werden weiterhin in Python 2.6 unterstützt, sind aber in 3.0 verschwunden.

7

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__')