【问题标题】:What is an appropriate return type for an namedtuble, created within a function在函数中创建的命名管的适当返回类型是什么
【发布时间】:2020-04-22 13:56:10
【问题描述】:

我正在尝试静态类型一些生产性代码,它看起来像这样的代码 sn-p:

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

namedtuble tbl_attr 在函数内创建,应该由其他函数调用。 我的问题是:如何正确输入返回 ->。从我的角度来看,有一些选项,例如 -> object 或 ofc `Any.

【问题讨论】:

    标签: python static typing mypy


    【解决方案1】:

    将 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={'foo': 'bar'})

    打印(tbl.attr['foo'])

    【讨论】:

    • 您说的完全正确,不幸的是,从我的角度来看这是不可能的。不应触及生产性代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多