Python,不可变类型的子类化

2024-09-29 02:29:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下课程:

class MySet(set):

    def __init__(self, arg=None):
        if isinstance(arg, basestring):
            arg = arg.split()
        set.__init__(self, arg)

这和预期一样工作(用字符串的单词而不是字母初始化集合)。但是,当我想对set的不可变版本执行相同操作时,__init__方法似乎被忽略了:

^{pr2}$

我能用__new__实现类似的功能吗?在


Tags: 字符串selfnoneifinitdefarg单词
1条回答
网友
1楼 · 发布于 2024-09-29 02:29:01

是的,您需要重写__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')

输出是:

^{2}$

相关问题 更多 >