Articles of getattr

Python – getattr y concatenación

Así que al jugar con getattr en mi código descubrí lo siguiente: myVariable = foo.A.bar Funciona … pero algo como esto: B = “A” myVariable = getattr(foo, B + “.bar”) devuelve un error que foo no contiene un atributo A.bar. ¿A dónde me voy mal? ¡Gracias!

setattr y getattr con métodos

Tengo una clase de plato de caldera que delega algunas acciones a una clase de referencia. Se parece a esto: class MyClass(): def __init__(self, someClass): self.refClass = someClass def action1(self): self.refClass.action1() def action2(self): self.refClass.action2() def action3(self): self.refClass.action3() Esta es la clase de referencia: class RefClass(): def __init__(self): self.myClass = MyClass(self) def action1(self): #Stuff to execute […]

¿Cuál es la relación entre __getattr__ y getattr?

Sé que este código es correcto: class A: def __init__(self): self.a = ‘a’ def method(self): print “method print” a = A() print getattr(a, ‘a’, ‘default’) print getattr(a, ‘b’, ‘default’) print getattr(a, ‘method’, ‘default’) getattr(a, ‘method’, ‘default’)() Y esto está mal: # will __getattr__ affect the getattr? class a(object): def __getattr__(self,name): return ‘xxx’ print getattr(a) Esto […]

¿Cuál es la diferencia entre el tipo .__ getattribute__ y el objeto .__ getattribute__?

Dado: In [37]: class A: ….: f = 1 ….: In [38]: class B(A): ….: pass ….: In [39]: getattr(B, ‘f’) Out[39]: 1 Bien, ¿eso llama super o arrastra el mro? In [40]: getattr(A, ‘f’) Out[40]: 1 Esto es lo esperado. In [41]: object.__getattribute__(A, ‘f’) Out[41]: 1 In [42]: object.__getattribute__(B, ‘f’) ————————————————————————— AttributeError Traceback (most […]

doc para __getattr__ atributos definidos

Tengo que personalizar __getattr__ para llamar a otra función para leer. Esto funciona bien, excepto que la ayuda (object.attr) no funciona. Este código se utiliza en un entorno interactivo, por lo que la ayuda () se vuelve importante para nosotros. ¿Hay un diseño mejor para lograr las mismas características pero con ayuda () que funciona […]

Determine si __getattr__ es una llamada de método o atributo

¿Hay alguna forma de determinar la diferencia entre un método y una llamada de atributo utilizando __getattr__? Es decir, en class Bar(object): def __getattr__(self, name): if THIS_IS_A_METHOD_CALL: # Handle method call def method(**kwargs): return ‘foo’ return method else: # Handle attribute call return ‘bar’ foo=Bar() print(foo.test_method()) # foo print(foo.test_attribute) # bar Los métodos no son […]

__getattr__ para variables estáticas / de clase en python

Tengo una clase como: class MyClass: Foo = 1 Bar = 2 Siempre que se invoca MyClass.Foo o MyClass.Bar , necesito que se invoque un método personalizado antes de que se devuelva el valor. ¿Es posible en Python? Sé que es posible si creo una instancia de la clase y puedo definir mi propio método […]

Comportamiento asimétrico para __getattr__, newstyle vs oldstyle classes

esta es la primera vez que escribo aquí, disculpe si el mensaje no está enfocado o es demasiado largo. Me interesaba comprender más acerca de cómo se obtienen los atributos de los objetos cuando es necesario. Así que leí la documentación de Python 2.7 titulada “Modelo de datos” aquí , conocí a __getattr__ y, para […]

Cómo usar __setattr__ correctamente, evitando la recursión infinita

Quiero definir una clase que contenga método de read y write , que se puede llamar de la siguiente manera: instance.read instance.write instance.device.read instance.device.write Para no usar clases entrelazadas, mi idea era sobrescribir los métodos __getattr__ y __setattr__ y verificar, si el nombre dado es device para redirigir el retorno a self . Pero me […]

El objeto ‘super’ no llama a __getattr__

Tengo un objeto envuelto dentro de otro. El “Wrapper” accede a los atributos del objeto “Wrapped” al reemplazar __getattr__ . Esto funciona bien hasta que necesito anular un atributo en una subclase y luego acceder al atributo desde la clase base usando super() . Todavía puedo acceder al atributo directamente desde __getattr__ pero ¿por qué […]