【发布时间】:2020-02-18 13:33:37
【问题描述】:
所以函数gendata 接受两个可选参数(name 和source),然后根据source 的值调用parser,但参数与此函数中所需的参数相同。
- 解决必需参数与无必需参数的推荐方法是什么?
- Python 文档中有一个typing.Types 的示例,它表明
Type[SuperClass]应该接受所有继承自它的子类。为什么mypy在这种情况下会抱怨,为什么只针对 arg 1 和 2 而不是 3 (source)?
exmaple.py:
from dataclasses import dataclass
from typing import List, Optional, Type
@dataclass
class BaseItem:
name: str
value: int
@dataclass
class Item(BaseItem):
pass
@dataclass
class AnotherItem(BaseItem):
pass
def parser(item: Type[BaseItem], name: str, source: int) -> Type[BaseItem]:
item.value = source
return item
def gendata(
items: List[Item], name: Optional[str] = None, source: Optional[int] = None
) -> None:
for item in items:
if source:
item = parser(item, name, source)
测试:
$ mypy example.py
e.py:31: error: Incompatible types in assignment (expression has type "Type[BaseItem]", variable has type "Item")
e.py:31: error: Argument 1 to "parser" has incompatible type "Item"; expected "Type[BaseItem]"
e.py:31: error: Argument 2 to "parser" has incompatible type "Optional[str]"; expected "str"
Found 3 errors in 1 file (checked 1 source file)
【问题讨论】:
标签: python type-hinting type-annotation