虽然我知道 Python 的鸭子类型概念,但有时我会为函数参数的类型或函数返回值的类型而苦恼。
现在,如果我自己编写函数,我确实知道类型。但是如果有人想使用和调用我的函数怎么办,他/她怎么知道这些类型呢?我通常将类型信息放在函数的文档字符串中(例如: "...the id argument should be an integer..."
和 "... the function will return a (string, [integer]) tuple."
)
但是在文档字符串中查找信息(并将其作为编码人员放在那里)真的是应该的方式吗?
编辑: 虽然大多数答案似乎都指向“是的,文档!”我觉得这对于“复杂”类型来说并不总是那么容易。
例如:如何在文档字符串中 简洁地 描述一个函数返回一个元组列表,每个元组的形式为 (node_id, node_name, uptime_minutes) 并且元素分别是字符串、字符串和整数?
docstring PEP 文档没有给出任何相关指导。
我想反对意见是在那种情况下应该使用类,但我发现 python 非常灵活,因为它允许使用列表和元组传递这些东西,即 没有 类。
原文由 Rabarberski 发布,翻译遵循 CC BY-SA 4.0 许可协议
这就是动态语言的工作原理。但这并不总是一件好事,尤其是在文档很差的情况下——有人试图使用一个文档很差的 python 框架吗?有时您必须重新阅读源代码。
以下是一些避免鸭子打字问题的策略:
另外,最重要的一点之一:
应该只传递一些明确定义和记录的类型。通过查看代码,其他任何事情都应该显而易见:不要有来自远处的奇怪参数类型,您无法通过查看代码附近来弄清楚……
相关的(也与文档字符串相关),python 中有一种技术称为
doctests
。用它来记录你的方法应该如何使用——同时有很好的单元测试覆盖率!