【发布时间】:2016-07-04 16:05:15
【问题描述】:
我正在玩 python 的 3.5 类型提示。我想知道如何键入提示类方法的返回类型。
这就是我的想法:
>>> class A():
@classmethod
def a(cls) -> A:
pass
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
class A():
File "<pyshell#24>", line 3, in A
def a(cls) -> A:
NameError: name 'A' is not defined
显然它不起作用。我想一种方法是像这样做某种“前向声明”:
>>> class A():
pass
>>> class A():
@classmethod
def a(cls) -> A:
pass
但这并没有“pythonic”的感觉。人们通常如何解决这个问题?
【问题讨论】:
-
不仅小“pythonic”,而且完全不正确 - 因为第二类中的“A”指的是第一个,现在被遮蔽的“A”类,而不是将使用的实际类。
-
@jsbueno 同意,但规范解决方案指向一个字符串,这也不是正确的类...
-
是的,但是由于规范规定,将进行检查的工具负责从 odule 命名空间中检索字符串中命名的对象。使用字符串,该对象将是当前类(除非它被它下面的另一个类遮蔽);通过声明存根,注解中的“活动”对象将指向存根,任何检查工具都会检索存根类而不是实际类。
-
简而言之,如果你需要像上面那样做(我已经在另一个上下文中)不要重新声明类 - 正常声明它,并使用正常的分配来添加新成员 - 比如在
class A: pass\n def b(self) -> A: return A()\nA.b = b -
@jsbueno 如何应用类方法?
标签: python python-3.5 type-hinting