Articles of introspección de

Cómo obtener todas las instancias de una clase dentro del módulo actual

Tengo un módulo foo que define una clase Foo y crea una instancia de varias instancias de esta clase. Desde otros módulos, puedo import foo y obtener una lista de los objetos de Foo instanciados por: [getattr(foo,f) for f in dir(f) if isinstance(getattr(foo,f), foo.Foo)] Sería conveniente si pudiera hacer esto desde el módulo foo . […]

Cambiar la referencia a la función en tiempo de ejecución en Python

Necesito cambiar una llamada a una función dentro de otra función durante el tiempo de ejecución. Considere el siguiente código: def now(): print “Hello World!” class Sim: def __init__(self, arg, msg): self.msg = msg self.func = arg self.patch(self.func) def now(self): print self.msg def run(self): self.func() def patch(self, func): # Any references to the global now() […]

obtener la ruta de la clase o el espacio de nombres de una clase en Python, incluso si está nested

Actualmente estoy escribiendo un módulo de serialización en Python que puede serializar clases definidas por el usuario. para hacer esto, necesito obtener el espacio completo de nombres del objeto y escribirlo en un archivo. Entonces puedo usar esa cadena para recrear el objeto. por ejemplo, supongamos que tenemos la siguiente estructura de clase en un […]

¿Es posible escribir en un objeto de marco de python tal como lo devuelve sys._getframe () desde el código de python que se ejecuta dentro del intérprete?

A propósito de esta pregunta , hay un poco de andamiaje dentro del intérprete para inspeccionar objetos de marco, que puede ser recuperado por sys._getframe() . Los objetos del marco parecen ser de solo lectura, pero no puedo encontrar nada obvio en los documentos que explícitamente lo indiquen. ¿Alguien puede confirmar si estos objetos son […]

Introspección de Python: cómo verificar el módulo / línea de llamada actual desde dentro de la función

Tengo una función: # utils.py def hello(name=’World’): # Detect where I’m being called from. print(‘Hi, %s. You called this from %s at line # %d.’ % (name, mod, lineno)) # “mod“ and “lineno“ on previous line would have been set in real use. Importo esa función y la ejecuto en otro lugar # other.py (this […]

Obtener información de los llamadores de función en python

Quiero obtener información sobre los llamadores de una función específica en python. Por ejemplo: class SomeClass(): def __init__(self, x): self.x = x def caller(self): return special_func(self.x) def special_func(x): print “My caller is the ‘caller’ function in an ‘SomeClass’ class.” ¿Es posible con python?

¿Cómo obtener el nombre de los parámetros reales de la función en Python?

Por ejemplo: def func(a): # how to get the name “x” x = 1 func(x) Si uso el módulo de inspect , puedo obtener el objeto de marco de stack: import inspect def func(a): print inspect.stack() afuera: [ (, ‘ts.py’, 9, ‘func’, [‘ stack = inspect.stack()\n’], 0) (, ‘ts.py’, 18, ”, [‘func(x)\n’], 0) ] o […]

¿Cómo averiguar los valores predeterminados del argumento de una función particular en otra función en Python?

Supongamos que tenemos una función como esta: def myFunction(arg1=’a default value’): pass Podemos usar introspección para averiguar los nombres de los argumentos que toma myFunction() usando myFunction.func_code.co_varnames , pero ¿cómo averiguar el valor predeterminado de arg1 (que es ‘a default value’ en el ejemplo anterior)?

Viendo el código de una función de Python

Digamos que estoy trabajando en el shell de Python y se me asigna una función f . ¿Cómo puedo acceder a la cadena que contiene su código fuente? (Desde el shell, no abriendo manualmente el archivo de código). Quiero que esto funcione incluso para las funciones lambda definidas dentro de otras funciones.

En Python, ¿hay una manera de saber si un objeto “implementa una interfaz” antes de pasarlo a una función?

Sé que esto puede sonar como una pregunta estúpida, especialmente para alguien que conoce la naturaleza de Python, pero me preguntaba: ¿hay alguna forma de saber si un objeto “implementa una interfaz” para decir? Para dar un ejemplo de lo que quiero decir: digamos que tengo esta función: def get_counts(sequence): counts = {} for x […]