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] #

!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage