Python - Re-Implementando __setattr__ con super
Sé que este se ha cubierto antes, y tal vez no sea la forma más pitónica de construir una clase, pero tengo muchas clases de nodos mayas diferentes con muchas @properties para recuperar / configurar datos de nodos, y quiero ver si la construcción de los atributos procesales reduce la sobrecarga / mantenimiento.
Necesito volver a implementar __setattr__ para que se mantenga el comportamiento estándar, pero para ciertos atributos especiales, el valor se obtiene / establece en un objeto externo.
He visto ejemplos de volver a implementar __setattr__ en el desbordamiento de la pila, pero parece que me falta algo.
No creo que esté manteniendo la funcionalidad predeterminada desetAttr
Aquí hay un ejemplo:
externalData = {'translateX':1.0,'translateY':1.0,'translateZ':1.0}
attrKeys = ['translateX','translateY','translateZ']
class Transform(object):
def __getattribute__(self, name):
print 'Getting --->', name
if name in attrKeys:
return externalData[name]
else:
raise AttributeError("No attribute named [%s]" %name)
def __setattr__(self, name, value):
print 'Setting --->', name
super(Transform, self).__setattr__(name, value)
if name in attrKeys:
externalData[name] = value
myInstance = Transform()
myInstance.translateX
# Result: 1.0 #
myInstance.translateX = 9999
myInstance.translateX
# Result: 9999 #
myInstance.name = 'myName'
myInstance.name
# AttributeError: No attribute named [name] #
!