我正在尝试使用
__getitem__(self, x, y):
Run Code Online (Sandbox Code Playgroud)
在我的Matrix类上,但在我看来它不起作用(我仍然不太清楚使用python).我这样称呼它:
print matrix[0,0]
Run Code Online (Sandbox Code Playgroud)
是否有可能使用多个参数?谢谢.也许我只能使用一个参数但是将其作为元组传递?
Chr*_*Lee 51
__getitem__ 只接受一个参数(除了self),所以你传递了一个元组.
你可以这样做:
class matrix:
def __getitem__(self, pos):
x,y = pos
return "fetching %s, %s" % (x, y)
m = matrix()
print m[1,2]
Run Code Online (Sandbox Code Playgroud)
输出
fetching 1, 2
Run Code Online (Sandbox Code Playgroud)
请参阅http://docs.python.org/reference/datamodel.html#object.getitem了解更多信息
Ale*_*lli 23
实际上,当你执行时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)
Run Code Online (Sandbox Code Playgroud)
这种"好方法"是否没有实际意义......它已经在Python 3中被弃用了,所以你可以推断出Guido并不认为它在长时间的反思中是好的 ;-).做你自己的解包(签名中的单个参数)没什么大不了的,可以让你提供更清晰的错误(而不是那些不同类型的错误,因为索引这样一个实例的非常相似的错误,例如,1 vs 3个指数;-).
| 归档时间: |
|
| 查看次数: |
10041 次 |
| 最近记录: |