Articles of getattr

cadena de Python para funcionar: globals () vs sys.module vs dictionary

Quiero saber cuál es la mejor manera de asignar la cadena a una función. Hasta ahora sé que puedo usar: globals () [func_string] sys.modules [__ name__] funcs_dictionary [“func_string”: func] Aquí está el código: >>> def foo(arg): … print “I’m foo: %s” % arg … >>> def bar(arg): … print “I’m bar: %s” % arg … […]

¿Existe una función como __getattr__ que se llama para las variables de clase?

Quiero redefinir la función de obtención de un objeto para que pueda interceptar cuando se solicite cualquier atributo. Al usar la función getattr , no se detecta cuando se solicitan variables existentes (por ejemplo, attr1 en este caso). ¿Hay alguna forma de evitar esto, así que puedo ejecutar una función cuando se solicita attr1? class […]

¿Pueden los métodos XML-RPC ser llamados por nombre (como cadenas) en Python?

En Python, llamar a los métodos XML-RPC implica invocar métodos en un objeto proxy: from xmlrpclib import ServerProxy print ServerProxy(‘https://example.com/rpc’).api.hello_there(‘John’) En algunos otros idiomas, como perl, pasa el nombre de su método como un parámetro del método. use Frontier::Client; $p = Frontier::Client->new(url => ‘https://example.com/rpc’); $result = $p->call(‘api.hello_there’, ‘John’); print $result; ¿Hay alguna forma de invocar […]

Enfoque de PHP a la magia de python __getattr __ ()

Me preguntaba si había alguna forma en PHP para duplicar parte de la magia del acceso a atributo / clave de Python. Utilizo una clase de ORM de Mongo escrita por Steve Lacey llamada Minimongo en la que utiliza el __getattr__ y el __getitem__ para redireccionar el acceso con clave y atributo y preservar la […]

Python usando getattr para llamar a la función con parámetros variables

Estoy usando getattr para llamar a diferentes funciones dependiendo de una variable. Estoy haciendo algo así: getattr(foo, bar) () Eso funciona, llamando a funciones como foo.bar () Mi problema es que tengo funciones de ‘barra’ y quiero llamarlo con diferentes parámetros. Por ejemplo: def f1() : pass def f2(param1) : pass def f3(param1,param2) : pass […]

¿Cómo manejar y devolver las propiedades Y funciones que faltan en una clase de Python usando la función __getattr__?

Es bastante fácil usar el método especial __getattr__ en las clases de Python para manejar propiedades o funciones faltantes, pero aparentemente no ambas al mismo tiempo. Considere este ejemplo que maneja cualquier propiedad solicitada que no esté definida explícitamente en ninguna otra parte de la clase … class Props: def __getattr__(self, attr): return ‘some_new_value’ >>> […]

¿Es una mala práctica usar getattr de Python extensamente?

Estoy creando un entorno tipo shell. Mi método original para manejar la entrada del usuario era usar un diccionario de comandos de mapeo (cadenas) a métodos de varias clases, haciendo uso del hecho de que las funciones son objetos de primera clase en Python. Por el bien de la flexibilidad (principalmente para los comandos de […]

Cómo obtener valores de clave externa con getattr desde modelos

Tengo un Project modelo y obtengo los atributos de eso con el siguiente instr. attr = getattr(project, ‘id’, None) project es la instancia, id es el campo y None es el tipo de retorno predeterminado. mi pregunta es ¿qué pasa si quiero obtener las claves FK con esto? Obtener el nombre del cliente project.customer.name ¿Cómo […]

Cómo se pasan los argumentos a una función a través de __getattr__

Considere el siguiente ejemplo de código (python 2.7): class Parent: def __init__(self, child): self.child = child def __getattr__(self, attr): print(“Calling __getattr__: “+attr) if hasattr(self.child, attr): return getattr(self.child, attr) else: raise AttributeError(attr) class Child: def make_statement(self, age=10): print(“I am an instance of Child with age “+str(age)) kid = Child() person = Parent(kid) kid.make_statement(5) person.make_statement(20) se puede […]

¿Cómo lanzar la función getattr en python con parámetros adicionales?

Quiero llamar a alguna función desconocida agregando parámetros usando la función getattr. ¿Es posible?