Если я не понимаю ваш вопрос, просто выполните:
from typing import List
class NumberParty(List[int]):
def __str__(self) -> str:
return "?".join([str(x) for x in self])
def total(self) -> int:
return sum(self)
... должно просто сработать.
Обратите внимание, что наследование от List[int]
по сути то же самое, что наследование от list
- единственное различие заключается в том, что контролеры типов поймут, что должен содержать ваш пользовательский класс, и проверят, что вы используете методы типа append(...)
безопасным для типов способом.
Однако нет разница во время выполнения, и вы все равно можете свободно игнорировать свою проверку типов и добавлять строки или что-то подобное, точно так же, как Python позволяет добавлять строки в обычные списки, аннотированные как тип List [int].
А так как этот класс является подтипом List [int], фрагменты кода, подобные приведенным ниже, должны проверять тип:
def expect_list(x: List[int]) -> None: pass
def expect_number_party(x: NumberParty) -> None: pass
n = NumberParty()
# Both type checks
expect_list(n)
expect_number_party(n)
По поводу вашего вопроса о переопределении __init__
- вам нужно вызвать супер конструктор, если вы решите выбрать этот маршрут, чтобы убедиться, что класс настроен правильно.