ошибка AssertionError: group argument must be None for now

код

class Knight(Thread):
    def __init__(self, name, power):
        super().__init__(name)
        self.name = str(name)
        self.power = int(power)
        self.days = 0
        self.enemies = 100

    def start_war(self):
        print(f'{self.name}, на нас напали!')

    def finish_war(self):
        print(f'{self.name} одержал победу спустя {self.days} дней(дня)!')

    def run(self):
        self.start_war()
        while self.enemies > 0:
            print(f'{self.name} сражается {self.days}..., осталось {self.enemies} воинов.')
            self.enemies -= self.power
            self.days += 1
            sleep(1)
        self.finish_war()


first_knight = Knight('Sir Lancelot', 10)
second_knight = Knight("Sir Galahad", 20)

first_knight.start()
second_knight.start()

first_knight.join()
second_knight.join()

print('Все битвы закончились!')

выдает ошибку

assert group is None, "group argument must be None for now" ^^^^^^^^^^^^^ AssertionError: group argument must be None for now

подскажите как исправить плиз


Ответы (1 шт):

Автор решения: Amgarak

Если открыть блок __init__ в Thread, можно увидеть причину проблемы:

class Thread:
    name: str
    @property
    def ident(self) -> int | None: ...
    daemon: bool
    def __init__(
        self,
        group: None = None,
        target: Callable[..., object] | None = None,
        name: str | None = None,
        args: Iterable[Any] = (),
        kwargs: Mapping[str, Any] | None = None,
        *,
        daemon: bool | None = None,
    ) -> None: ...

Пытаясь записать имя потока в group: None = None - логично получаем ошибку:

assert group is None, "group argument must be None for now"

Следовательно, надо передать имя потока корректно:

class Knight(Thread):
    def __init__(self, name, power):
        super().__init__(name=name)
        self.power: int = power
        self.days = 0
        self.enemies = 100

Или ничего не передавать, super().__init__().. или super().__init__(None, name)..

class Knight(Thread):
    def __init__(self, name, power):
        super().__init__()
        self.name: str = name
        self.power: int  = power
        self.days = 0
        self.enemies = 100
→ Ссылка