为Python的元组类编写包装器

时间:2015-01-28 19:44:42

标签: python

我正在尝试为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)  

0 个答案:

没有答案