Python, разделяя неизменные типы на подклассы

У меня есть следующий класс:

class MySet(set):

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

Это работает как ожидалось (инициализирующий набор со словами строки, а не букв). Однако, когда я хочу сделать то же с неизменной версией набора, __init__ метод, кажется, проигнорирован:

class MySet(frozenset):

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

Я могу достигнуть чего-то похожего с __new__ ?

13
задан EoghanM 25 June 2010 в 18:41
поделиться

1 ответ

Да, вам нужно переопределить специальный метод __ 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'])
12
ответ дан 2 December 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: