我知道这个之前已经介绍过,也许不是构建类的最 Pythonic 方式,但我有很多不同的 Maya 节点类,其中有很多用于检索/设置节点数据的 @properties,我想看看如果在程序上构建属性会减少开销/维护。
我需要重新实现 __setattr__ 以保持标准行为,但对于某些特殊属性,该值是获取/设置为外部对象。
我已经看到了在堆栈溢出时重新实现 __setattr__ 的示例,但我似乎遗漏了一些东西。
我不认为我在维护setAttr的默认功能
这是一个例子:
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] #
!