Использовать объект в качестве списка списка в Python - PullRequest
2 голосов
/ 22 мая 2019

Мне интересно, возможно ли использовать объект для доступа к определенному значению в списке.

Например, возьмите следующий код:

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 ]

5 голосов
/ 22 мая 2019

Вы можете создать подкласс типа 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 голос
/ 22 мая 2019

Вы должны использовать расстояние [node.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
...