Типа намекает. Как намекнуть, что объект, передаваемый в функцию, должен иметь доступ к методу / атрибуту? - PullRequest
0 голосов
/ 16 февраля 2020

пожалуйста, посмотрите пример, который использует numpy строку доктрины для подсказки типа:

def my_function(obj):
    """Do some work.

    Parameters
    ----------
        obj : Any class with `do_work()` method
    Returns
    -------
    None
    """
    time.sleep(5)

Мне интересно, есть ли способ сообщить вызывающей стороне, что функция ожидает объект, который имеет метод do_work ? Есть ли способ указать такие подсказки типа, используя python3 / mypy type hinting или / и numpy строки документации?

1 Ответ

3 голосов
/ 16 февраля 2020

Определить Protocol

import typing


class Worker(typing.Protocol):
    def do_work(self):
        pass


class SomeWorker:
    def do_work(self):
        print("Working...")


def my_function(obj: Worker):
    obj.do_work()


x = SomeWorker()
my_function(x)  # This will type check; `SomeWorker` doesn't have to inherit from Worker
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...