假设我有一个类,其中数据存储在多个属性中,但该类的用户只能看到一个数据。例如:
class TestClass:
def __init__(self):
self.a = [1, 2, 3, 4]
self.b = [-4, -3, -2, -1]
def __getitem__(self, item):
return [(self.a[elem] if elem < len(self.a) else self.b[elem - len(self.a)])
for elem in item]
然后,我可以定义:
In[]: x = TestClass()
Out[]: x[(1,3,5,6)]
[2, 4, -3, -2]
现在,为此添加一些功能会非常好,例如
x[(1,3,5,6)].mean() (or some other function)
一种方法是重新定义一个新类TestClassSuper
class TestClassSuper:
def __init__(self, value):
self.value = value
def mean(self):
return mean(self.value)
然后修改__getitem__
中的TestClass
函数以返回
def __getitem__(self, item):
return TestClassSuper([(self.a[elem] if elem < len(self.a)
else self.b[elem - len(self.a)])
for elem in item])
但是,我想知道是否有另一种方法可以定义__getattr__
来处理x[(1,3,5,6)].mean()
内部TestClass
之类的调用,而不是定义TestClassSuper
包装器?
我正在使用Python 3.4
答案 0 :(得分:1)
没有。首先执行项访问,然后对结果执行属性查找。没有办法将两者合并为一个操作。