python - 类查找函数python

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

我想知道是否有一种方法可以在不执行 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/

相关文章:

java - 创建全局变量或在函数内部创建实例

将 tibble 重新排列到数组中

python - BeautifulSoup,soup() 和 soup.findAll() 之间的区别?

python - 如何将这个格式奇怪的循环打印函数转换为具有类似输出的数据框?

python - 任何 Python 脚本来保存像 Firefox 这样的网站?

python - Python 中矩阵值的数值积分

c++ - 如何在 CImg 中将像素数据作为矩阵/vector 获取?

python - 如何在单个虚拟主机上服务 django 和 gatsby?

c++ - 链接错误 - 功能二叉树,派生类

c++ - 仅在声明定义时检查 vector/数组边界