是否可以在__getitem___上使用多个参数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我正在尝试使用

__getitem__(self, x, y):

在我的矩阵类,但在我看来,它不起作用(我仍然不知道使用python)。我这样声明它:

print matrix[0,0]

是否有可能使用多个参数?谢谢。也许我可以只使用一个参数,但将它作为元组传递?

提问于
用户回答回答于

__getitem__只接受一个参数(除了Self),所以你会得到一个元组。

你可以这样做:

class matrix:
    def __getitem__(self, pos):
        x,y = pos
        return "fetching %s, %s" % (x, y)

m = matrix()
print m[1,2]

输出

fetching 1, 2

用户回答回答于

事实上,当你执行时bla[x,y],你正在调用type(bla).__getitem__(bla, (x, y))--Python自动为你形成元组,并将它__getitem__作为第二个参数传递给它(第一个参数是它的self)。没有什么好的方法[1]表达需要__getitem__更多论据,但也没有必要。

[1]在Python中,2.*你实际上可以给出__getitem__一个自动解包签名,它会引发ValueError或者TypeError当你索引的索引太多或太少时......:

>>> class X(object):
...   def __getitem__(self, (x, y)): return x, y
... 
>>> x = X()
>>> x[23, 45]
(23, 45)

扫码关注云+社区