使用类型提示进行类型转换

问题描述 投票:0回答:1

比如说,我有一个函数应该执行一些内部操作并显示提供的文本:

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
的内容,但仍然不知道这个转换是如何完成的。

python type-hinting typing
1个回答
0
投票

您可以使用

text
display_text
中输入提示
String
参数吗,但如果提供的参数是
str
,则调用
convert
并将返回值分配给文本,而无需在
display_text
函数中添加任何额外代码,只是带有类型提示

不,不只是带有类型提示,因为类型注释在运行时绝对是惰性的并且不执行任何操作(并且对于from __future__ import annotations

,它们甚至不会被评估)。如果这是一个棘手的问题,并且“
inadisplay_text
函数”是一个问题,那么是的,你可以@decorate你的函数(或装饰一个包含它们的类,或使用元类)来使用类型注释来包装函数如果需要的话可以转换参数。

© www.soinside.com 2019 - 2024. All rights reserved.