我正在尝试静态键入一些生产代码,它看起来像下面的代码片段:
from collections import namedtuple
from typing import Dict, Union, NamedTuple, Any
def read_attr(ident: str, attributes: Union[None, Dict[str, str]]):
tbl_attr = namedtuple('tbl', ['id', 'attr'])
if attributes:
return tbl_attr(id=ident, attr=attributes)
else:
return tbl_attr(id=ident, attr=None)
tbl = read_attr(ident='ID1', attributes={'foo': 'bar'})
print(tbl.attr['foo'])
命名公用tbl_attr
是在函数内创建的,应该由其他函数调用。我的问题是:如何正确键入返回->
。从我的角度来看,有一些选择,比如-> object
或ofc`Any。
将namedtuple定义移动到函数定义之外可以将其用作返回类型。见下文
tbl_attr = namedtuple('tbl', ['id', 'attr'])
def read_attr(ident: str, attributes: Union[None, Dict[str, str]]) -> tbl_attr:
if attributes:
return tbl_attr(id=ident, attr=attributes)
else:
return tbl_attr(id=ident, attr=None)
tbl=read_attr(ident='ID1',attributes={'fo':'bar'}(
打印(tbl.attr['fo'](