Not*_*ame 12 python duck-typing
我正在学习如何使用 Python 3.8 ( PEP 544 )中引入的协议类。
因此,typing.Protocol类是 的子类,ABCMeta并且它们的处理方式就像抽象类一样,并且具有允许使用结构子类型的额外好处。我试图思考现在我会使用什么抽象基类,但我却一片空白。
与 ABC 相比,协议类有哪些缺点(如果有)?也许它们的性能会受到影响?是否有任何特定情况表明 ABC 仍然是最佳选择?
我更喜欢ABCs 因为它们很明确。阅读代码的人Protocol可能不知道您的类旨在实现另一个模块中的接口或深度依赖项。同样,您可能会意外地遵守 aProtocol的签名,而不遵守其合同。例如,如果一个函数接受一个
class Image(Protocol):
def draw() -> None:
...
Run Code Online (Sandbox Code Playgroud)
显然没有意义
class Cowboy:
def draw() -> None:
...
Run Code Online (Sandbox Code Playgroud)
但类型检查器会很乐意接受它。
| 归档时间: |
|
| 查看次数: |
1107 次 |
| 最近记录: |