PyCharm:来自预先存在的方法提示的函数的 Typedef 提示
PyCharm: Typedef hint for function from pre-existing method's hint
简介
假设以下代码:
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()
函数的 return 值的提示:
test_run()
函数的提示:
我明白 IDE 不会 运行 typing.get_type_hints(Foo.key)['return']
从 Foo.key
方法中获取 return 类型的类型,因为这是 运行 仅在 运行 时间。
问题
假设 Foo.key
将来会发生变化,是否有任何方法可以定义基于 class 中方法提示的类型提示?
基本上有这样的提示:
def test_run() -> Dict[str, Foo]
Miyagi 先生有很好很简单的解决方案:
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
简介
假设以下代码:
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()
函数的 return 值的提示:
test_run()
函数的提示:
我明白 IDE 不会 运行 typing.get_type_hints(Foo.key)['return']
从 Foo.key
方法中获取 return 类型的类型,因为这是 运行 仅在 运行 时间。
问题
假设 Foo.key
将来会发生变化,是否有任何方法可以定义基于 class 中方法提示的类型提示?
基本上有这样的提示:
def test_run() -> Dict[str, Foo]
Miyagi 先生有很好很简单的解决方案:
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