Eog*_*anM 13 python set immutability
我有以下课程:
class MySet(set):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
set.__init__(self, arg)
Run Code Online (Sandbox Code Playgroud)
这可以按预期工作(用字符串而不是字母初始化集合).但是,当我想对set的不可变版本执行相同操作时,该__init__方法似乎被忽略:
class MySet(frozenset):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
frozenset.__init__(self, arg)
Run Code Online (Sandbox Code Playgroud)
我可以实现类似的东西__new__吗?
dou*_*lep 12
是的,您需要覆盖__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')
Run Code Online (Sandbox Code Playgroud)
输出是:
MySet(['baz', 'foo', 'bar'])
Run Code Online (Sandbox Code Playgroud)