Изменение аргументов конструктора namedtuple посредством создания подклассов?

я хочу создать namedtuple , который представляет отдельные флаги в коротком битовом поле. Я пытаюсь создать подкласс, чтобы можно было распаковать битовое поле до создания кортежа. Однако моя текущая попытка не работает:

class Status(collections.namedtuple("Status", "started checking start_after_check checked error paused queued loaded")):
    __slots__ = ()

    def __new__(cls, status):
        super(cls).__new__(cls, status & 1, status & 2, status & 4, status & 8, status & 16, status & 32, status & 64, status & 128)

Теперь мой опыт работы с super () ограничен, а мой опыт работы с __ new __ практически отсутствует, поэтому я не совсем уверен, что делать с (для меня) загадочной ошибкой TypeError: super .__ new __ (Status): Status не является подтипом super . Поиск в Google и изучение документации не дали ничего поучительного.

Помощь?

18
задан Ben Blank 13 August 2010 в 18:50
поделиться

1 ответ

Я бы избегал super , если только вы явно не поддерживаете множественное наследование (надеюсь, это не так здесь;-). Просто сделайте что-нибудь вроде ...:

def __new__(cls, status):
    return cls.__bases__[0].__new__(cls,
                                    status & 1, status & 2, status & 4,
                                    status & 8, status & 16, status & 32,
                                    status & 64, status & 128)
10
ответ дан 30 November 2019 в 08:15
поделиться
Другие вопросы по тегам:

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