magic getitem data __str__ __getitem__ __eq__ python python-datamodel

getitem - ¿Cómo se verifica si un método de python está vinculado o no?



models python (3)

Dada una referencia a un método, ¿hay alguna manera de verificar si el método está vinculado a un objeto o no? ¿Puedes acceder también a la instancia a la que está obligado?


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

Métodos definidos por el usuario:

Cuando se crea un objeto de método definido por el usuario recuperando un objeto de función definido por el usuario de una clase, su atributo im_self es None y se dice que el objeto de método está desatado. Cuando se crea uno recuperando un objeto de función definido por el usuario de una clase a través de una de sus instancias, su atributo im_self es la instancia y se dice que el objeto del método está vinculado. En cualquier caso, el atributo im_class del nuevo método es la clase a partir de la cual tiene lugar la recuperación, y su atributo im_func es el objeto de función original.

En Python 2.6 y 3.0 :

Los objetos del método de instancia tienen nuevos atributos para el objeto y la función que comprende el método; el nuevo sinónimo de im_self es __self__ , e im_func también está disponible como __func__ . Los nombres antiguos aún se admiten en Python 2.6, pero desaparecen en 3.0.


En python 3, el atributo __self__ solo se establece en métodos vinculados. No está configurado en None en las funciones simples (o los métodos independientes, que son simplemente funciones en python 3).

Usa algo como esto:

def is_bound(m): return hasattr(m, ''__self__'')