Bre*_*ers 3 python class matrix
我有课
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)])
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以在matrix不做任何事情的Kaart.matrixRC[1][2]情况下获得某个位置的价值,而只需做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])
Run Code Online (Sandbox Code Playgroud)
输出
[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
Run Code Online (Sandbox Code Playgroud)
如果我们遵循评论中的 Roars 建议,我们可以__str__稍微简化该方法。
def __iter__(self):
return self.matrixRC.__iter__()
def __str__(self):
return '\n'.join(str(row) for row in self)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1707 次 |
| 最近记录: |