我想为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
答案 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__?