これは以前にカバーされたことを知っており、おそらくクラスを構築する最もpythonicな方法ではありませんが、ノードデータを取得/設定するための多くの@プロパティを持つさまざまなMayaノードクラスがたくさんあり、見たいです手続き的に属性を構築すると、オーバーヘッド/マンチネンスが削減されます。
標準の動作が維持されるように __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] #
!