python 类查找函数

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__()功能,但我不太确定它的作用,而且它看起来不像我需要的那样。

PM *_*ing 5

是的,__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)