x、yとして公開したいさまざまな内部変数を持つPythonクラスがあります。簡単な例は次のとおりです。
class Vec2:
def __init__(self):
self.data = [0.0, 0.0]
self.mapping = {'x':0, 'y':1}
def __getitem__(self, index):
return self.data[index]
def __setitem__(self, index, value):
self.data[index] = value
def __getattr__(self, key):
if key in self.mapping:
return self.data[self.mapping[key]]
else:
raise AttributeError
def _setattr__(self, key, value):
# ?????
pass
__getattr__
は self のメンバーにアクセスするため、これは機能しないと思っていたでしょう。ただし、 a を定義しようとしない限り、すべてが機能します__setattr__
- と等しくしただけでも、pass
再帰が発生します。どのように実装すればよい__setattr__
ですか? 特に、キーが x または y でない場合、何を呼び出す必要がありますか?
また、一般的に私の質問は、これが次のような望ましい動作を実装する正しい方法であるかどうかです。
v = Vec2()
# this
v.x = 1.0
v.y = 0.0
# or this
v[0] = 1.0
v[1] = 0.0
またはより良い代替手段があるかどうか。私はpython 2.7.5を使用しています。ありがとう!