Python - Neuimplementieren von __setattr__ mit super
Ich weiß, dass dieses Thema bereits behandelt wurde und vielleicht nicht die pythonischste Methode zum Erstellen einer Klasse ist, aber ich habe viele verschiedene Maya-Knotenklassen mit vielen @ -Eigenschaften zum Abrufen / Festlegen von Knotendaten, und ich möchte es sehen Wenn die Attribute prozedural erstellt werden, wird der Overhead / die Mantinenz verringert.
Ich muss __setattr__ erneut implementieren, damit das Standardverhalten beibehalten wird, aber für bestimmte spezielle Attribute wird der Wert auf ein externes Objekt abgerufen / festgelegt.
Ich habe Beispiele für die Neuimplementierung von __setattr__ beim Stapelüberlauf gesehen, aber mir fehlt anscheinend etwas.
Ich glaube nicht, dass ich die Standardfunktionalität von behaltesetAttr
Hier ist ein Beispiel:
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] #
!