python中的双键索引器

dpiehjr4  于 2023-01-19  发布在  Python
关注(0)|答案(3)|浏览(111)

我是Python新手。我想写一个有两个键的类作为索引器。也需要能够像这样在类中使用它们:

a = Cartesian(-10,-10,10,10) # Cartesian is the name of my class
a[-5][-1]=10

在笛卡尔类中:

def fill(self,value):
   self[x][y] = x*y-value

我试着

def __getitem__(self,x,y):
  return self.data[x-self.dx][y-self.dy]

但不起作用。

qf9go6mv

qf9go6mv1#

如果您只需要一个轻量级应用程序,可以让__getitem__接受一个元组:

def __getitem__(self, c):
  x, y = c
  return self.data[x-self.dx][y-self.dy]

def __setitem__(self, c, v):
  x, y = c
  self.data[x-self.dx][y-self.dy] = v

像这样使用:

a[-5,-1] = 10

但是,如果您正在进行大量数值计算,或者这是应用程序的组成部分,请考虑使用Numpy并将此坐标表示为向量:Link

bnl4lu3b

bnl4lu3b2#

有什么理由需要显式定义Cartesian()类吗?例如,它上面有计算方法吗?如果没有,那么只需使用列表中的列表来使用这种类型的语法。
如果您确实需要一个类,那么可以考虑向它添加一个.coordinate(x, y)方法,而不必尝试使用list语法。

icnyk63a

icnyk63a3#

接受元组:

>>> class Foo(object):
...     def __getitem__(self, key):
...         x, y = key
...         print x, y
... f = Foo()
... f[1,2]
1 2

相关问题