将对象用作Python中的列表索引

时间:2019-05-22 07:30:14

标签: python class override

我想知道是否可以使用对象访问列表中的特定值。

例如,采用以下代码:

class Node:
    def __init__(self, label):
        self.label = label

    def __int__(self):
        return int(self.label)

distances = [10, 20, 30, 40, 50, 60]

node = Node("2")
print(distances[node]) # I expected this to be treated as distances[2]

这将产生错误,因为node不是distances[node]的有效索引。我希望通过在__int__类中定义Node来将节点隐式转换为整数,然后将其视为有效索引。

所以,我想知道是否有一种方法可以进行以下工作(也许是通过重写某种方法?):

print(distances[node])  # Desired Output: 30

无需执行以下操作:

print(distances[int(node)])

2 个答案:

答案 0 :(得分:5)

您可以继承int类型并相应地重写。

class Node(int):
    def __init__(self, label):
        self.label = label

    def __int__(self):
        return int(self.label)


distances = [10, 20, 30, 40, 50, 60]

node = Node("2")

print(distances[node])

答案 1 :(得分:1)

您应该使用distance [node.id],因为您要调用对象节点的属性ID。

class Node:
    def __init__(self, id):
        self.id = id

    def __int__(self):
        return self.id

distances = [10, 20, 30, 40, 50, 60]

node = Node(2)

In [1] : print(distances[node.id]) # I expected this to be treated as distances[2]
Out[1] : 30