Python аннотации внутри классов - PullRequest
0 голосов
/ 06 декабря 2018

Я работаю с некоторыми алгоритмами графов и хочу сделать общий каркас графов / ребер.Я начал с создания класса Edge следующим образом:

class Edge:
    source = None
    destination = None
    isDirected = False
    isWeighted = False
    weight = None

    def __init__(self, source, destination, isDirected = False, weight = None):
        self.source = source
        self.destination = destination
        self.isDirected = isDirected
        if not weight is None:
            self.isWeighted = True
            self.weight = weight

    def isSameEdge(self, edge: {'help': 'Some helpfull text goes here', 'type': Edge}):
    if \
        self.isDirected != edge.isDirected or \
        self.isWeighted != self.isWeighted or \
        self.weight != edge.weight:
        return False
    if self.isDirected:
        if \
            self.destination != edge.destination or \
            self.source != edge.source:
            return False
    return True

Я получаю это сообщение об ошибке:

def isSameEdge(self, edge: {'help': 'Some helpfull text goes here', 'type': Edge}):
NameError: name 'Edge' is not defined

Мой вопрос:

1) Как я могу сообщитьPython, что параметр края в функции isSameEdge имеет тип Edge?

2) Я не хочу обязательно ограничивать тип. Я просто хочу, чтобы Pycharm / любая другая IDE давала мне подсказки о методах / переменных класса, доступных для

1 Ответ

0 голосов
/ 06 декабря 2018

Цитирование python.org :

Некоторые инструменты могут захотеть поддерживать аннотации типов в коде, который должен быть совместим с Python 2.7.Для этой цели этот PEP имеет предлагаемое (но не обязательное) расширение, где аннотации функций помещаются в # type: comment.Такой комментарий должен быть помещен сразу после заголовка функции (перед строкой документации).

Вы можете проверить это PEP для получения дополнительной информации.

Код Python 3:

def embezzle(self, account: str, funds: int = 1000000, *fake_receipts: str) -> None:
    """Embezzle funds from account using fake receipts."""
    <code goes here>

эквивалентно следующему [python 2.7]:

def embezzle(self, account, funds=1000000, *fake_receipts):
    # type: (str, int, *str) -> None
    """Embezzle funds from account using fake receipts."""
    <code goes here>

Редактировать: определить тип данных аргумента переменной

Youследует определить как Union[int, float, None]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...