如何解决PyCharm:来自预先存在的方法提示的函数的 Typedef 提示 简介问题
简介
假设以下代码:
import typing
class Foo:
def __init__(self,l_key: str = "1234"):
self.key = l_key
def get_key(self) -> str:
return self.key
dictOfFoos = typing.Dict[typing.get_type_hints(Foo.get_key)['return'],Foo]
def test_return() -> dictOfFoos:
test = dict()
test["123"] = Foo()
return test
test_return()
print("0 " + str(type(Foo().key)))
print("1 " + str(typing.get_type_hints(Foo.get_key)['return']))
print("2 " + str(typing.get_type_hints(test_return)['return']))
输出如下:
0 <class 'str'>
1 <class 'str'>
2 typing.Dict[str,__main__.Foo]
现在,当我按 Ctr+Q 显示“快速文档”时,会显示以下工具提示。
提示 test_run()
函数的返回值:
test_run()
函数的提示:
我知道 IDE 不会运行 typing.get_type_hints(Foo.key)['return']
来从 Foo.key
方法获取返回类型的类型,因为它仅在运行时运行。
问题
有没有办法定义基于类中方法提示的类型提示,假设 Foo.key
将来可能会改变?
基本上有如下提示:
def test_run() -> Dict[str,Foo]
解决方法
MisterMiyagi 提供了很棒且简单的解决方案:
def test_return_v2():
foo = Foo()
return {foo.get_key(): foo}
哪个生成了正确的提示:
但我一直在寻找类型提示,因为我想编写没有实现但定义要在继承类中覆盖的方法的接口方法(当然我应该提到的问题,抱歉):
def get_key(self) -> str:
pass
用 type
函数声明类型就足够了:
dictOfFoos2 = typing.Dict[type(Foo.get_key()),Foo]
def test_return_v3() -> dictOfFoos2:
test = dict()
test["123"] = Foo()
return test
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。