Прежде всего, об ошибках Type[Something]
, согласно документации, вы должны использовать Type[Something]
, когда вы получаете тип в качестве параметра, если вы получаете экземпляр BaseItem
, вы должны просто использовать BaseItem
.
Пример:
a = 3 # Has type 'int'
b = int # Has type 'Type[int]'
c = type(a) # Also has type 'Type[int]'
Ссылка: https://docs.python.org/3/library/typing.html#typing. Тип
Об ошибке Optional
, Я обычно читаю необязательно как nullable (в документации даже сказано, что Optional[X]
эквивалентно Union[X, None]
.
Ссылка: https://docs.python.org/3/library/typing.html#typing .Optional
Так что, если вы получаете параметр с типом Optional[str]
и пытаетесь передать функцию, которая получает str
, это вызовет ошибку, одним из решений будет просто проверить, является ли значение None
, и вместо этого введите строку по умолчанию, например:
def gendata(
items: List[Item], name: Optional[str] = None, source: Optional[int] = None
) -> None:
if name is None:
name = ''
if source:
for item in items:
item = parser(item, name, source)