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 […]
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’ >>> […]
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 […]
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 […]
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 […]
Quiero llamar a alguna función desconocida agregando parámetros usando la función getattr. ¿Es posible?
Quiero consultar dinámicamente qué objetos de una clase me gustaría recuperar. getattr parece ser lo que quiero, y funciona bien para los objetos de nivel superior en la clase. Sin embargo, también me gustaría especificar subelementos. class MyObj(object): def __init__(self): self.d = {‘a’:1, ‘b’:2} self.c = 3 myobj = MyObj() val = getattr(myobj, “c”) print […]
Cuando no se encuentra un atributo, se llama al object.__getattr__ . ¿Hay una manera equivalente de interceptar métodos indefinidos?
Me gustaría modificar una variable privada de objeto class Example(): __myTest1 = 1 __myTest2 = 1 def __init__(self): pass def modifyTest(self, name = ‘Test1’, value): setattr(self, ‘__my’+name, value); Intenté el código anterior y parece que no es posible alcanzar una variable privada, AttributeError: Example instance has no attribute ‘__myTest1’ ¿Hay alguna forma de modificar una […]
No sé si este es un comportamiento esperado del método getattr built_in. getattr ejecuta el argumento predeterminado (3º), incluso si el argumento real (2º) cumple la condición. Ejemplo: def func(): print(‘In Function’) class A: def __init__(self): self.param = 12 a = A() Cuando ejecuto getattr(a, ‘param’, func()) da este resultado: In Function 12 Tenga en […]