gpt4 book ai didi

python - 如何记录鸭子类型(duck typing)?

转载 作者:太空狗 更新时间:2023-10-29 17:19:49 27 4
gpt4 key购买 nike

我的文档太多了,因为每当我遇到一个复杂的鸭子类型(duck typing)时,我都需要某种方式来表达“这个鸭子类型(duck typing)”,但却陷入了“你的函数需要这个输入的这个”的无休止循环,但不记录它”,然后记录它。这会导致臃肿、重复的文档,例如:

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.

依此类推,针对BazQux等函数。我需要一些更短的写作方式“arg is a (type of object)”。

对于某些鸭子类型(duck typing),它就像“一个类似字典的对象”一样简单:我们知道我们对字典的期望,因此,我们知道要传递什么。 dict,或可以模仿它的东西。

我觉得 C++ 在模板化类型方面也有同样的问题。 Haskell 会有它,但可以使用类型类的定义来记录它。 (注:Haskell classes != Java/C++/Python/etc. 中的类)(注:我并没有真正用 Haskell 编程,所以如果它是一个蹩脚的例子,请原谅我。)

我应该走传统的 OO 路线,只写一个基类,然后在文档中说“任何像这个基类的东西”吗?代码不会强制从基类派生(因为不需要从基类派生对象),并且基类除了记录接口(interface)的属性外没有任何值(value)。

另一方面,我正在对 Python 进行编程,并且我尝试在一种语言的惯用语中进行编程。 (否则通常会造成伤害。)基类有利于继承功能,但是当您的基类完全抽象时,它似乎不会在鸭子类型(duck typing)的语言中增加值(value)。


编辑:对于答案:我知道鸭子类型(duck typing)是什么(从帖子中应该可以看出这一点)。我在哪里记录它是问题,尤其是。当不存在要附加文档的类时。

最佳答案

duck typing 背后的想法是,你记录下你期待的是一只鸭子类型(duck typing),而其他对象是否伪装成一只鸭子类型(duck typing)取决于其他对象。

文档中没有任何 API 指定它接受 StringIO 对象;但是,我们可以在大多数需要“类文件对象”的地方使用它们。

此外,在大多数情况下,标准库会尽量避免命名鸭子类型(duck typing)所需的特定方法。这使得实现可以更改。 random.sample 例如,API 可以根据可迭代对象或序列来定义。

如果你想比这更具体,你可以使用 abstract base classes . collections module 中已经包含了几个(例如 Iterable、Hashable 和 Sized)或 numbers module (有理数、积分数等)。仿照这些来编写自己的模型并不难。然后,文档简单地提到需要哪些 ABC(例如 xSized IterableyIntegral )。

关于python - 如何记录鸭子类型(duck typing)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8059649/

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