Что является подходящим типом возврата для именованной таблицы, созданной внутри функции - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь набрать c набрать некоторый продуктивный код, он выглядит примерно так:

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 создан внутри функции и должен вызываться другая функция. У меня вопрос: как правильно набрать return ->. С моей точки зрения, есть несколько вариантов, например -> object или c Any.

1 Ответ

0 голосов
/ 22 апреля 2020

Перемещение определения 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 (идент. = 'ID1', атрибуты = {'foo': 'bar'})

print (tbl.attr ['foo'])

...