类查找函数python

2024-06-26 17:40:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我要上课

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不是这些示例中的发起方,而是Kaart类的一个实例)。我看到有一个__getitem__()函数,但我不太确定它能做什么,而且它看起来也不能满足我的需要。在


Tags: 方法inselfforinitdef情况range
2条回答

尽管你有异议,__getitem__()是这里的解决方案。这样使用:

def __getitem__(self, key):
    return self.matrixRC[key]

是的,__getitem__有效。;)您还应该定义__setitem__。{cd3>还添加了方法。在

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])

输出

^{pr2}$

如果我们遵循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)

相关问题 更多 >