当前位置: 首页 > 知识库问答 >
问题:

在Python3中注释staticmethod的返回类型[duplicate]

毕和志
2023-03-14

我开始更多地使用Python3的类型支持,并且我希望能够注释作为替代构造函数staticmethods的返回类型。

下面是一个简单的例子;如果我包含注释,它将失败:

def from_other_datastructure(json_data: str) -> MyThing:
    NameError: name 'MyThing' is not defined
import typing


class MyThing:
    def __init__(self, items: typing.List[int]):
        self.items = items

    @staticmethod
    def from_other_datastructure(json_data: str):
        return MyThing(
            [int(d) for d in json_data.split(',')]
        )

if __name__ == '__main__':
    s1 = MyThing([1, 2, 3])

    s2 = MyThing.from_other_datastructure("2,3,4")

那么,在为类型注释定义类之前,如何引用类呢?

共有1个答案

傅正阳
2023-03-14

发布后,我找到了正确的答案-转发引用可以定义为字符串

因此,正确的答案相当简单,PyCharm获得了一笔奖金:

@staticmethod
def from_other_datastructure(json_data: str) -> 'MyThing':
    return MyThing(
        [int(d) for d in json_data.split(',')]
    )

https://www.python.org/dev/peps/pep-0484/#forward-references

 类似资料:
  • 在python 3.x中,通常使用函数的返回类型注释,例如: “void”类型的正确注释是什么? 我正在考虑三种选择:

  • 这是简化的代码 那么如何在类型注释中使用名称Myclass呢?我的TypeScript版本是3.2.2

  • 功能注释:PEP-3107 背景:我是PyCharm用户,在Linux上拥有CPython 3.4x。我发现注释函数参数和返回类型很有帮助。当我使用这些方法时,IDE可以更好地提示我。 问题:对于自链接方法,如何注释方法返回值?如果我使用类名,Python会在编译时抛出一个异常: 示例代码: 作为一个技巧,如果我把放在类声明的前面,它就会起作用。然而,我不知道这种技术是否有意想不到的负面副作用。

  • 问题内容: 在python 3中,我可以设置参数并返回类型注释。例: 问题是我无法使用当前类(图形)的返回类型进行注释,该类型尚未定义。例: 这段代码有错误 这些注释对于记录文档以及允许IDE识别参数和返回类型都非常有用=>启用自动完成功能 UPD:所以我想到的是这是不可能的,或者需要一些我不喜欢的技巧,所以我决定使用 可以理解的文档,尽管这违反了规则。缺点是它不适用于IDE自动完成功能。 问题答

  • 问题内容: 我如何使用类型提示来注释一个返回总是返回两个值的函数:a和a ?提示很接近,除了将返回值类型限制为元组,而不是生成器或其他可迭代类型。 我主要是好奇的,因为我想注释一个用于返回多个值的函数,如下所示: 通常函数喜欢做这样的事情(它返回一个元组),但我喜欢的类型暗示要足够灵活,以取代发电机或列表或别的东西返回的元组。 问题答案: 您总是返回 一个 对象;使用只需返回一个元组。 是的,完全

  • 我正在编写一些Python代码,其中必须使用父子设计,如下所示: 但是Python提出了一个,并抱怨没有定义