【发布时间】:2014-02-11 10:35:33
【问题描述】:
我有一个 Python 类,它有各种内部变量,我想将它们公开为 x、y,一个简单的例子是:
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 的成员。但是,只要我不尝试定义__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。谢谢!
【问题讨论】: