如何为方法链创建类型提示?

How to create type-hints for method chaining?

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

根据 and this question,在支持链接的方法调用结束时返回 self 即可轻松完成链接。

但是,这些问题都没有解决如何向用户表明方法支持链接(除了明显的文档字符串注释)。如下面的示例代码所示,我尝试添加类型提示,但由于 class A 在我尝试在类型提示中使用时尚未完全定义,Python 无法实例化 class.

的实例
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 支持自动完成的结构。

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 没有在引号中定义,所以它被算作一个变量

您可以在类型提示中使用您的 class,根据此 ,使用您的 class 作为字符串。

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

def chain(self) -> "A":