我正在尝试为Python的元组类编写一个包装器,这样我就可以拥有一个像元组一样的对象,但只有一些属性和一两个额外的函数。我似乎无法解决构造函数和继承的冲突。这就是我想要的构造函数:
class Edge(tuple):
def __init__(self, x, y):
super().__init__(self, (x, y))
self.head, self.tail = x, y
因此,Edge(1,2)
将形成具有属性(1, 2)
和x
的元组y
。如果有可能,我甚至不想让元组的其他构造函数(tuple()
和tuple(iter)
),但这不是优先事项。
无论我如何编写代码,总是看起来tuple的构造函数会对我的编码进行预测,因此错误:TypeError: tuple() takes at most 1 argument (2 given)
。
我正在使用Python 3,我认为这会对super()
语法产生影响(我认为Python 2需要类似super(Edge, self).__init__()
的内容)。
编辑:对于未来的读者,我用 -
解决了这个问题class Edge(tuple):
def __new__(cls, x, y):
return super().__new__(cls, (x, y))
def __init__(self, x, y):
super().__init__()
self.head, self.tail = x, y
Edge(1, 2)