比如说,我有一个函数应该执行一些内部操作并显示提供的文本:
def display_text(text: str):
...
print(text)
还有一个带有
convert()
方法的类:
class String:
def __init__(self, string: str):
self.string = string
def convert(self):
return self.string
现在,您可以使用
text
在 display_text
中输入提示 String
参数,但如果提供的参数是 str
,则调用 convert
并将返回值分配给 text
吗?像这样:
def display_text(text: String):
...
print(text)
它应该在
display_text
函数中不需要任何额外代码,只需类型提示即可完成。我在一些库中看到过,但不知道它是如何工作的。
我尝试搜索一些库(例如discord.py转换器)的代码,在StackOverflow上搜索类似的问题,只找到了关于
typing.Protocol
的内容,但仍然不知道这个转换是如何完成的。
您可以使用
在text
中输入提示display_text
参数吗,但如果提供的参数是String
,则调用str
并将返回值分配给文本,而无需在convert
函数中添加任何额外代码,只是带有类型提示display_text
不,不只是带有类型提示,因为类型注释在运行时绝对是惰性的并且不执行任何操作(并且对于from __future__ import annotations
,它们甚至不会被评估)。如果这是一个棘手的问题,并且“ina
display_text
函数”是一个问题,那么是的,你可以@decorate你的函数(或装饰一个包含它们的类,或使用元类)来使用类型注释来包装函数如果需要的话可以转换参数。