我有课
class Kaart:
def __init__(self, rows = 10, colls = 10):
self.rows = rows
self.colls = colls
self.matrixRC = []
for _ in range(rows):
self.matrixRC.append([2 for _ in range(colls)])
我想知道是否有一种方法可以在不执行 Kaart.matrixRC[1][2]
的情况下获取 matrix
中某个位置的值,但是例如只是做 Kaart(1, 2)
或 Kaart[1, 2]
(Kaart 不是这些示例中的发起者,而是 Kaart
类)。我看到有一个 __getitem__()
函数,但我不太确定它的作用,而且它看起来不像我需要的那样。
最佳答案
是的,__getitem__
有效。 ;) 您还应该定义 __setitem__
。我还添加了一个 __str__
方法。
class Kaart:
def __init__(self, rows = 10, colls = 10):
self.rows = rows
self.colls = colls
self.matrixRC = []
for _ in range(rows):
self.matrixRC.append([2 for _ in range(colls)])
def __getitem__(self, key):
r, c = key
return self.matrixRC[r][c]
def __setitem__(self, key, value):
r, c = key
self.matrixRC[r][c] = value
def __str__(self):
return '\n'.join(str(row) for row in self.matrixRC)
kaart = Kaart()
kaart[2, 3] = 7
print(kaart)
print(kaart[2, 3])
输出
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 7, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
7
如果我们遵循Roars suggestion in the comments ,我们可以稍微简化一下 __str__
方法。
def __iter__(self):
return self.matrixRC.__iter__()
def __str__(self):
return '\n'.join(str(row) for row in self)
关于python - 类查找函数python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47548524/