是否可以在方法中使用 getitem ,即
Class MyClass:
@property
def function(self):
def __getitem__():
...
所以我可以做到
A = MyClass()
A.function[5]
A.function[-1]
答案 0 :(得分:3)
所有东西都是python中的第一类对象,所以这个想法应该有效(语法关闭),虽然我建议让function
自己的类包含属性,然后在MyClass中使用它,除非你有一个非常好的数据隐藏原因不这样做......
我想指出,我假设你想让function
返回一个可订阅的东西,而不是一个可订阅的函数列表。这是一个不同的实现(但也可以这样做。)
例如,可订阅的内容(您也可以只创建list
):
# python
> class FooFunc(list):
> pass
> class Foo:
> foofunc = FooFunc()
> f = Foo()
> f.foofunc.append("bar")
> f.foofunc[0]
'bar'
答案 1 :(得分:1)
不,那不行。当您访问已装饰为@property的属性时,请考虑调用的基础描述符逻辑。 get方法需要返回一个将用作计算属性function
的值。在这种情况下,函数不返回任何内容(属性的隐式None值)。然后,您的下载将尝试索引None
并繁荣。
但是,您可以从支持function
dunder方法的__getitem__
返回一个对象。这在语法上会“起作用”。
答案 2 :(得分:0)
如果您尝试使用代码(在类中修复C之后),您将看到它产生错误:“TypeError:'NoneType'对象是不可取消的”。
我认为最好的办法是创建一个__getitem__
的类,并将function
设置为该类的实例。是否需要如此复杂?