给定一个类型
t
(最初来自函数注释),我需要创建该类型的默认值。通常,t()
就能做到这一点,并且适用于多种类型,包括 bool
或 int
等基本类型。但是, tuple[bool, int]()
返回一个空元组,这不是正确的默认值。对于更复杂的类型,例如 tuple[bool, list[int]]
,它可能会变得稍微棘手。
我看到
tuple[bool, int].__args__
返回 (<class 'bool'>, <class 'int'>)
,这对于编写实现此功能的递归函数可能很有用,但我仍然遇到问题。
是否有现有函数可以执行此操作并返回默认值?如果没有,我将如何编写此代码以适用于所有标准类型?
我使用的是Python 3.11。
由于
tuple
是唯一一个标准类型,其中默认值不应该只是类型的实例化,因此您可以简单地在函数中对其进行特例,以递归方式为给定类型创建默认值:
from types import GenericAlias
def get_default_value(typ):
if isinstance(typ, GenericAlias) and issubclass(typ.__origin__, tuple):
return typ(map(get_default_value, typ.__args__))
return typ()
这样:
print(get_default_value(tuple[bool, list[int]]))
输出:
(False, [])