У меня вопрос по поводу подтипов встроенных типов и их конструкторов. Я хочу, чтобы класс наследовал как от кортежа, так и от пользовательского класса.
Позвольте привести конкретный пример. Я много работаю с графиками, имея в виду узлы, связанные с ребрами. Я начинаю делать некоторые работы над своим собственным графовым фреймворком.
Существует класс Edge, который имеет свои атрибуты и методы. Он также должен наследоваться от класса GraphElement. (GraphElement - это каждый объект, который не имеет значения вне контекста конкретного графа.) Но на самом базовом уровне ребро - это просто кортеж, содержащий два узла. Было бы неплохо синтаксического сахара, если бы вы могли сделать следующее:
edge = graph.create_edge("Spam","Eggs")
(u, v) = edge
Таким образом (u, v) будет содержать «Спам» и «Яйца». Это также поддержало бы итерацию как
for node in edge: ...
Я надеюсь, вы понимаете, почему я хотел бы подтипить кортеж (или другие базовые типы, такие как set).
Итак, вот мой класс Edge и его init :
class Edge(GraphElement, tuple):
def __init__(self, graph, (source, target)):
GraphElement.__init__(self, graph)
tuple.__init__((source, target))
Когда я звоню
Edge(aGraph, (source, target))
Я получаю TypeError: tuple () принимает максимум 1 аргумент (2 дано). Что я делаю не так?