Python:包装类和构造函数参数

时间:2015-04-09 22:01:56

标签: python inheritance

我想为frozenset创建一个简单的包装类来更改构造函数参数。以下是我的想法(正如我在Java中所做的那样):

class Edge(frozenset):
    def __init__(self, a, b):
        frozenset.__init__(self, {a, b})

我希望Edge(0,1)创建frozenset({0,1})

然而,我收到此错误:

>>>Edge(0,1)
TypeError: Edge expected at most 1 arguments, got 2

2 个答案:

答案 0 :(得分:3)

frozenset是不可变的,因此您需要覆盖__new__方法:

class Edge(frozenset):
    def __new__(cls, a, b):
        return super(Edge, cls).__new__(cls, {a, b})

请参阅here

答案 1 :(得分:2)

这是__new____init__之间关系的问题。您需要覆盖__new__。查看Python's use of __new__ and __init__?