2

我正在使用pyreverse和成功地从 Python 模块生成 UML 报告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

在此处输入图像描述

我研究了pylint docstyle 检查器,但它看起来与我的问题无关。

是否可以通过注释、文档字符串或其他方式使用类型提示显式指定每个方法和属性将返回的数据类型,以便它们显示在 pdf 报告中?

4

1 回答 1

2

在 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
于 2019-01-23T02:26:49.737 回答