python使用__getitem__作为方法
在一个方法里使用 getitem 是不是可能的呢?也就是说,
Class MyClass:
@property
def function(self):
def __getitem__():
...
这样我就可以做
A = MyClass()
A.function[5]
A.function[-1]
3 个回答
0
如果你在修正了Class中的C之后尝试运行你的代码,你会看到一个错误提示:“TypeError: 'NoneType'对象不可下标访问”。
我觉得你可以考虑创建一个包含__getitem__
方法的类,然后把function
设置为这个类的一个实例。这样做有什么特别复杂的原因吗?
1
不,这样做是行不通的。想想当你访问一个被标记为@property的属性时,背后其实有一些逻辑在运行。这个get方法需要返回一个值,这个值会被用作计算属性的function
。在这个情况下,function没有返回任何东西(默认为None)。所以你的下标操作会试图对None
进行索引,这样就会出错。
不过,你可以让function
返回一个支持__getitem__
这个特殊方法的对象。这样在语法上就能“正常工作”了。
4
在Python中,所有东西都是一等公民,所以这个想法是可行的(不过语法上有点问题)。我建议把function
单独做成一个类,并在里面添加一些属性,然后在MyClass中使用它,除非你有很好的理由想要隐藏数据,不然这样做会更好。
我想强调的是,我假设你想让function
返回一个可以下标访问的东西,而不是一个可以下标访问的函数列表。这是两种不同的实现方式(当然也可以实现函数列表)。
举个例子,一个可以下标访问的东西(你也可以直接用list
来实现):
# python
> class FooFunc(list):
> pass
> class Foo:
> foofunc = FooFunc()
> f = Foo()
> f.foofunc.append("bar")
> f.foofunc[0]
'bar'