Pyreverse: как добавить возвращаемые типы для методов и свойств при создании отчетов uml? - PullRequest
0 голосов
/ 23 января 2019

Я успешно генерирую отчеты UML из модулей Python, используя pyreverse и graphviz.Я вижу, что pylint достаточно умен, чтобы сказать для некоторых свойств, что является типом выходных данных, но не для всех и ни для каких методов.

Исходный код:

def get_int():
    return 555

def get_math_int():
    return math.pow(2, 5)

class ClassFoo(object):
    def __init__(self, x, y):
        self.attr1 = "hello"
        self.attr2 = get_int()
        self.attr3 = get_math_int()

    def spam(self):
        return 77

class ClassBar(object):
    def __init__(self, x, y):
        self.attr4 = "hello"

    def spam(self):
        return 99

Вывод pdf

enter image description here

Я рассмотрел pylint docstyle checker , но он выглядел неуместным для моей проблемы.

Можно ли явно указать, используя подсказку типа через комментарий, строку документации или каким-либо другим образом, какой тип данных будет возвращаться каждым методом и атрибутом, чтобы они отображались в отчете pdf?

1 Ответ

0 голосов
/ 23 января 2019

В Python 3.5 или более поздней версии вы можете использовать встроенный typings модуль ; в Python 2 или более ранних версиях Python 3 mypy - ваш единственный вариант. Хорошая IDE (например, PyCharm) фактически скажет вам, если вы делаете ошибки, если все ваши классы хорошо аннотированы.

Извлечение информации о типе довольно болезненно, но начинается с чтения атрибута __annotations__ в классах, имеющих подсказки типов (см. PEP-0484 ).

Ваш пример, полностью подсказанный с использованием Python 3.5 или более поздней версии:

from typing import Any

def get_int() -> int:
    return 555

def get_math_int() -> int:
    return math.pow(2, 5)

class ClassFoo(object):
    def __init__(self, x: Any, y: Any):
        self.attr1 = "hello"
        self.attr2 = get_int()
        self.attr3 = get_math_int()

    def spam(self) -> int:
        return 77

class ClassBar(object):
    def __init__(self, x: Any, y: Any):
        self.attr4 = "hello"

    def spam(self) -> int:
        return 99
...