我想知道是否可以使用对象访问列表中的特定值。
例如,采用以下代码:
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)])
答案 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