Как напечатать подсказку nametuple в Python? - PullRequest
1 голос
/ 04 июня 2019

Тип подсказки может определить тип возвращаемого значения в python, поэтому, когда функция возвращает тип namedtuple, то как его определить

def bar(func):
    def decorator(*args, **kwargs):
        return namedtuple('data', 'name user')(**func(*args, **kwargs))

    return update_wrapper(decorator, func)


@bar
def info() -> NamedTuple:
    return {'name': 'a1', 'user': 'b1'}

Ожидается тип 'NamedTuple', вместо него получен Dict [str, str]

Как известно, функция info() возвращает Dict[str, str], но декоратор @bar меняет ее. Теперь функция info() возвращает объект namedtuple, поэтому есть ли способ указать, что функция info() возвращает объект namedtupe по типу подсказки в python?

1 Ответ

0 голосов
/ 04 июня 2019

Экземпляры NamedTuple создаются с помощью функции collection.namedtuple () .

Поскольку вы заинтересованы в наборе элементов namedtuple, вы можете создать пользовательский тип, который наследует типизированную версию NamedType (как упомянуто @jab), и использовать его в подсказках типов, как показано ниже.

from typing import NamedTuple

class CustomType(NamedTuple):
    name: str
    user: str

def info() -> CustomType:
    return CustomType('a1', 'b1')
...