gpt4 book ai didi

python - 类型提示与鸭子类型

转载 作者:行者123 更新时间:2023-12-04 00:00:04 25 4
gpt4 key购买 nike

在 Python 中使用类型提示的一个缺点是牺牲了 Python 代码的美感。

在类型提示之前,我的方法签名很简洁:

def echo(items):
for i in items:
print(i)

由于我的团队正在使用类型提示,因此我也在我的代码中添加了类型提示:

def echo(items: Set[str]) -> None:

仍然很清晰。一段时间后,我的代码中对集合进行操作的其他部分要求我的 items 是可散列的,而其他部分则不需要。所以我决定也支持 frozenset ,现在我的方法看起来像:

def echo(items: Union[Set[str],Frozenset[str]]) -> None:

它开始看起来像 Java 中的方法,尽管在 Java 中我可以操作接口(interface),忽略实现细节:

void echo(Set<String> items) {

Python 不支持接口(interface)概念,即我不能说 Set 实现了 Frozenset。由于鸭子类型,初始实现对 SetFrozenset 都有效:两者的行为都与 set 相同。但是,我的印象是,显式类型提示在某种程度上与鸭子类型不兼容

如何在打字提示和鸭式打字之间找到一个很好的平衡点?

最佳答案

使用AbstractSet:

from typing import AbstractSet

def echo(items: AbstractSet[str]) -> None:
...

SetFrozenSet 都(直接或间接)继承自 AbstractSet:

AbstractSet
|
|
+--------------+
| |
| |
MutableSet FrozenSet
|
|
Set

关于python - 类型提示与鸭子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63251820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com