Обновление
Поскольку Inherited
для инициализации требуются и x
, и y
, они должны быть явно определены как аргументы. Kwargs используется для кооперативного наследования, чтобы один класс мог вызывать init другого, не беспокоясь о типе аргументов (здесь z:float
). Следовательно, Any
действительно является правильной аннотацией в этом случае.
Аналогично, для инициализации Final
я бы рекомендовал определить __init__
со всеми необходимыми необходимыми аргументами, т.е. def __init__(self, x:int, y:int, z:float, **kwargs:Any)
Опять же, здесь, Final также может быть унаследован от другого класса, и он не заботится о аргументах производного класса, но сохраняет **kwargs:Any
для совместимости совместимого наследования
ps, извините за обход и примерно об одном и том же.
Старый ответ
kwargs в python - это набор пар ключ-значение, которые не входят в число явно определенных аргументов метода. Следовательно, **kwargs
в конечном итоге соберет любой аргумент foo=bar
, где foo
не входит в определенные аргументы.
Значение bar
может быть практически любым, поэтому Any
используется, так как **
означает, что значения будут заключены в диктат kwargs по своей природе.
Здесь вы можете аннотировать тип значения bar
.
**kwargs:int
будет означать, что вы можете передать любую необъявленную пару значений ключа до это int.