我的文档很臃肿,因为每当我遇到复杂的鸭子类型时,我都需要某种方式来表达“这种鸭子类型”,但却陷入了“你的函数需要这个输入,但没有'不记录它”,然后记录它。这会导致臃肿、重复的文档,例如:
def Foo(arg):
"""
Args:
arg: An object that supports X functionality, and Y functionality,
and can be passed to Z other functionality.
"""
# Insert code here.
def Bar(arg):
"""
Args:
arg: An object that supports X functionality, and Y functionality,
and can be passed to Z other functionality.
"""
# Insert code here.
等等,等等,for Baz
,Qux
,和其他函数。我需要一些更短的写作方式“arg
是一种(对象的类型)”。
对于某些鸭子类型,它就像“类似字典的对象”一样简单:我们知道我们对字典的期望,因此我们知道要传递什么。A dict
,或者可以模仿它的东西。
我觉得 C++ 对模板类型也有同样的问题。Haskell 会拥有它,但可以使用类型类的定义来记录它。(注意:Haskell 类!= Java/C++/Python/etc 中的类。)(注意:我并没有真正使用 Haskell 编程,如果这是一个糟糕的例子,请原谅我。)
我应该走传统的 OO 路线,只写一个基类,然后在文档中说“像这个基类这样的东西”吗?代码不会强制从基类派生(因为不需要从基类派生对象),并且基类基本上没有添加任何值,除了记录接口的属性。
另一方面,我正在编写 Python 编程,并且我尝试使用一种语言的习语进行编程。(否则通常会很痛苦。)基类有利于继承功能,但是当您的基类完全抽象时,它似乎不会在鸭子类型语言中增加价值。
编辑:答案:我知道什么是鸭子打字(这应该从帖子中显而易见)。我在哪里记录它是一个问题,尤其是。当不存在附加文档的类时。