я хочу создать 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 и изучение документации не дали ничего поучительного.
Помощь?
Я бы избегал 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)