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

如何为方法链创建类型提示?[重复]

符俊材
2023-03-14

我正在编写一个包含一个对象的库,该对象允许对其某些方法进行方法链接。我想为这个库的用户提供一个简单的方法来知道是否有任何特定的方法支持链接(并且“用户”包括提供自动完成的IDE)。

根据这个问题和这个问题,通过在支持链接的方法调用结束时html" target="_blank">返回自己可以很容易地完成链接。

然而,这些问题都没有解决如何向用户表明一个方法支持链接(除了明显的docstring注释)。如下面的示例代码所示,我试图添加一个类型提示,但是由于当我试图在类型提示中使用类< code>A时,它还没有完全定义,Python无法实例化该类的一个实例。

class A():

    def chain(self) -> A:  # `self` is of type A, so `-> A` is an appropriate return type
        print("Chaining!")
        return self        # Enable method chaining
>>> A().chain().chain().chain()       # Should print "Chaining!" three times.
Traceback (most recent call last):
  File "scratch.py", line 1, in <module>
    class A():
  File "scratch.py", line 3, in A
    def chain(self) -> A:
NameError: name 'A' is not defined

指示方法支持Python中的链接的有效方法是什么?

理想的答案是使用类型提示或其他允许IDE支持自动完成的构造。

共有2个答案

令狐钧
2023-03-14
class A():
    def chain(self) -> 'A':  # `self` is of type A, so `-> A` is an appropriate return type
        print("Chaining!")
        return self

A().chain().chain().chain()

在您的代码中,A没有用引号定义,因此它被计算为变量

艾文斌
2023-03-14

根据这篇优秀的文章,您可以在类型提示中使用您的类作为字符串。

在这种情况下,您需要按如下方式修改函数签名:

def chain(self) -> "A":
 类似资料:
  • 是否可以将类型提示传播到重写方法? 比方说,我有以下课程: 当我在pycharm不建议对属性/方法进行自动完成,但它为选择了正确的提示。显而易见的解决方法是只复制docstring,但我将有几十个不同的子体,因此这并不实用。 我正在使用PyCharm 3.1。1、社区版和专业版都会受到影响。 它是python本身完全缺少的东西,还是仅仅在PyCharm中?

  • 从继续https://stackoverflow.com/a/51132333/936293,为什么以下操作不起作用? 最后一行导致编译器错误: “{email:string;}”类型的参数不可分配给“MemberModel”类型的参数。键入“{email:string;}”不可分配给类型“Document”。类型“{email:string;}”中缺少属性“increment”。 < code

  • 问题内容: 我想为工具提示创建一个自定义CSS类,该类将包裹长度超过25-30的字符串。通常这样长的文本不适合tootltip文本区域。 而且是否有使用[工具提示ui.bootstrap.tooltip)进行此操作?就像使用自定义CSS类来获取所需的输出。 这是简单的CSS工具提示 这是相同的代码片段: 问题答案: CSS解决方案 对于眼前的问题有一个非常简单的解决方案。我基本上添加的是以下CSS

  • 我在Python 3中有以下代码: 但是我的编辑器(PyCharm)说引用不能解析(在方法中)。我应该如何指定我期望的返回类型是类型? 编辑:我认为这实际上是一个问题。它实际上在警告和代码完成中使用了这些信息。 但是如果我错了,请纠正我,并且需要使用其他语法。

  • 问题内容: 我对Java和android完全陌生,因此我尝试从android和数据库中找到有用的示例。我发现这个博客有一个项目: http://saigeethamn.blogspot.com/2009/10/android-developer-tutorial- part-12.html 我运行了该项目,它运行正常,但是我试图创建一个新项目,以将代码复制并粘贴到其中,但这不起作用:( 我在这条线

  • 问题内容: 我刚刚在PEP 484中看到以下示例: 不出所料,这在Python 2中不起作用: 但是,它适用于Python 3: 这是出乎意料的。如下面的示例所示,它实际上还没有检查类型(运行,但不会引发异常): 似乎在之后必须是一个函数的名称,但是该函数似乎被忽略了: 之后的名称似乎也是如此。 这种类型的提示语法是否还使用了其他内容(例如Java Modeling Language使用注释)?何