在函数中创建的namedtuble的适当返回类型是什么



我正在尝试静态键入一些生产代码,它看起来像下面的代码片段:

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'](

最新更新