我有以下课程:
class MySet(set): def __init__(self, arg=None): if isinstance(arg, basestring): arg = arg.split() set.__init__(self, arg)
这按预期工作(用字符串中的单词而不是字母初始化集合)。但是,当我想对不可变版本的set执行相同的操作时, __init__ 方法似乎被忽略:
__init__
class MySet(frozenset): def __init__(self, arg=None): if isinstance(arg, basestring): arg = arg.split() frozenset.__init__(self, arg)
我能做些类似的事吗 __new__ ?
__new__
是的,您需要重写 __new__ 特殊方法:
class MySet(frozenset): def __new__(cls, *args): if args and isinstance (args[0], basestring): args = (args[0].split (),) + args[1:] return super (MySet, cls).__new__(cls, *args) print MySet ('foo bar baz')
输出为:
MySet(['baz', 'foo', 'bar'])