【发布时间】:2016-11-07 21:01:53
【问题描述】:
Python 的 typing 模块定义了许多鸭子类型,例如,typing.SupportsAbs 来表示任何实现 __abs__ 特殊方法的类型。
是否可以以某种方式定义自定义鸭子类型,以便我可以将它们用作有效的类型注释?
例如,我希望能够注释一个参数应该是 threading.Lock 的鸭子类型等价物,即任何实现 acquire 和 release 方法的对象。理想情况下,我可以将这样的论点注释为SupportsAcquireAndRequire 或DuckLock,而不是object。
【问题讨论】:
-
你看过它们是如何定义的吗?你可以很容易地做类似的事情。
-
确实,
SupportsAbs只是继承自私有typing._Protocol的几行代码。有没有不涉及使用私有 API 的方法?
标签: python python-3.x type-hinting duck-typing