{site_name}

{site_name}

🌜 搜索

在 Python 中,typing 模块提供了一种称为 "Type aliase

Python 𝄐 0
pythonslots
在 Python 中,typing 模块提供了一种称为 "Type aliases" 的特性,它允许我们为现有的类型创建一个新的名称。这个新的名称被称为 Type Alias 或者 Type typedefs,它可以让我们在代码中更加方便地使用和表达这些类型。

Type Alias 可以用来定义任何符合 PEP 484 标准的类型,例如 Tuple、List、Dict、Union、Callable 等等。下面是一个例子,定义了一个 UserId 类型,它实际上就是一个字符串类型:

python
from typing import TypeAlias

UserId = TypeAlias(str, name='UserId')


这样做的好处是我们在代码中可以使用 UserId 来代替 str,并且这个别名会在类型提示中得到展示:

python
def get_user(user_id: UserId) -> Dict[str, Any]:
# ...


上面的例子中,get_user 函数接受一个 UserId 类型的参数,并返回一个字典类型。在函数定义中使用 UserId 而不是 str 可以使代码更加易读和清晰。

另外一个例子是定义一个 Point 类型,它表示平面上的一个点,包含 x 和 y 两个属性:

python
from typing import TypeAlias

class Point:
def __init__(self, x: float, y: float):
self.x = x
self.y = y

PointType = TypeAlias(Point, name='PointType')


这里我们定义了一个 Point 类,然后通过 TypeAlias 创建了一个别名 PointType,用来表示这个类的类型。这个别名可以在函数签名中使用:

python
from typing import Tuple

def distance(p1: PointType, p2: PointType) -> float:
return ((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2) ** 0.5

p1 = Point(0, 0)
p2 = Point(3, 4)
d = distance(p1, p2) # 5.0


上面的例子中,distance 函数接受两个 PointType 类型的参数,并返回它们之间的欧几里得距离。使用 TypeAlias 别名可以使函数签名变得更加清晰易读。