如何按照PEP484的要求设置与类相同的类型作为方法参数?

8 浏览
0 Comments

如何按照PEP484的要求设置与类相同的类型作为方法参数?

我的问题与新的Python类型提示相关。我试图在一个对象的方法中添加一个类型提示,该方法具有与对象相同类型的参数,但是PyCharm将其标记为错误(未解析的引用\'Foo\')。问题如下所示:\n

class Foo:
    def foo_method(self, other_foo: Foo):
        return "Hello World!"

\n所以问题是如何正确定义`other_foo`参数的类型。也许`__class__`是正确的吗?

0
0 Comments

问题的原因是在类的内部,类还没有被定义,导致了NameError的错误。为了解决这个问题,可以使用前向引用。具体方法是在方法的参数类型注解中使用字符串形式的类名,这样在请求类型时,会通过eval函数在全局作用域中解析字符串,从而得到类名为"Foo"的类。

另外,还可以使用annotations特性,将所有注解转换为字符串。这个特性在Python 3.7中引入,并计划在Python 3.10中成为默认行为,但目前已被推迟。

下面是两种解决方法的示例代码:

方法一:使用前向引用

class Foo:
    def foo_method(self, other_foo: "Foo"):
        return "Hello World!"

方法二:使用annotations特性

from __future__ import annotations
class Foo:
    def foo_method(self, other_foo: Foo):
        return "Hello World!"

以上两种方法都可以解决在方法的参数类型注解中使用与类相同类型的问题。

0