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
esNone
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 atributoim_self
es la instancia y se dice que el objeto del método está vinculado. En cualquier caso, el atributoim_class
del nuevo método es la clase a partir de la cual tiene lugar la recuperación, y su atributoim_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__
, eim_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__'')
atributo im_self (solo Python 2)