【发布时间】:2020-07-31 13:00:34
【问题描述】:
我想做这样的事情:
class Foo:
def __init__(self):
self.a = 0
def __getitem__(self, item):
return self # with some additional methods, let's say for the example
# one extra method 'my_method' that returns 1
f = Foo()
f.a
# 0
f.my_method()
# error: my_method not defined
f[].my_method()
# 1
f[].a
#0
我的对象有一些基本方法和其他一些方法,这些方法取决于调用__getitem__ 时传递的参数。
我试过这样的
class Foo:
def __init__(self):
self.a = 0
class Handler:
def __init__(self, item):
self.item = item
def my_method(self):
return 1
def __getitem__(self, item):
return self.Handler(item)
f = Foo()
f[].my_method()
# 1
# but i dont have access to the outer class
f[].a
# error
【问题讨论】:
-
您能解释一下为什么要使用 getitem 的更多动机吗?也许可以提出另一种方法来完成同样的事情。
-
我有一个形状作为坐标列表,我需要在其他框架(不同的基础和原点)中获取该形状,以便列出我需要指定框架的形状的所有点,并通过改变基来计算它们的坐标。然后我将不得不运行这些要点中的每一个:我想这样做:
for point in shape[frame] : ...。在我的示例中,Handler 应该有__iter__、__next__和__contains__methods