2024-10-05 14:21:25 发布
网友
我刚刚从functools学习了@singledispatch操作符。我的第一个想法是,我现在将在所有地方使用这个,,因为我经常编写这样的函数。但是,我已经使用Python好几年了,以前从未遇到过这种情况,这很可怕
为什么其他人不在任何地方使用这个?是否有我不知何故遗漏的昂贵的权衡
关于何时使用或不使用@singledispatch,是否有某种官方指导
singledispatch decorator只是实现多态性的几种方法之一,虽然它通过多方法在Clojure等语言中广泛使用,但它在Python领域并不常见
在面向OOP的语言中,您通常会看到多态性应用于类级别,其中对象定义了一个方法,它的派生子类调整了它的行为。这又是singledispatch的一种形式,它隐式地存在于对象的类类型中,即根据self参数而不是实际的方法输入参数来调度实现
self
另一种应用多态性的流行方法是我称之为“duck多态性”。为了澄清这一点,一个例子是列表和字典的pop方法。在本例中,两个对象都在抽象行为级别实现了相同的方法,这些方法将内容删除到集合中,它们共享核心思想,但实现不同,它们之间没有类层次结构。在某种意义上,它们类似于接口,但在不太严格的意义上,你像鸭子一样嘎嘎叫,这样我就可以像鸭子一样对待你,而不会破坏代码
pop
总而言之,实现相同行为的其他方法似乎被更多地使用,最终这取决于开发人员喜欢如何构造他们的代码
回到其他问题,我(天真地)不会说使用decorator会带来巨大的性能损失,尽管与直接调用一个func相比,肯定会涉及更多的查找和函数调用
关于官方建议,值得一读。在这里,您可以找到为什么将其添加到语言中的历史概述
编辑:宫城所作的一些重要更正
singledispatch decorator只是实现多态性的几种方法之一,虽然它通过多方法在Clojure等语言中广泛使用,但它在Python领域并不常见
在面向OOP的语言中,您通常会看到多态性应用于类级别,其中对象定义了一个方法,它的派生子类调整了它的行为。这又是singledispatch的一种形式,它隐式地存在于对象的类类型中,即根据
self
参数而不是实际的方法输入参数来调度实现另一种应用多态性的流行方法是我称之为“duck多态性”。为了澄清这一点,一个例子是列表和字典的
pop
方法。在本例中,两个对象都在抽象行为级别实现了相同的方法,这些方法将内容删除到集合中,它们共享核心思想,但实现不同,它们之间没有类层次结构。在某种意义上,它们类似于接口,但在不太严格的意义上,你像鸭子一样嘎嘎叫,这样我就可以像鸭子一样对待你,而不会破坏代码总而言之,实现相同行为的其他方法似乎被更多地使用,最终这取决于开发人员喜欢如何构造他们的代码
回到其他问题,我(天真地)不会说使用decorator会带来巨大的性能损失,尽管与直接调用一个func相比,肯定会涉及更多的查找和函数调用
关于官方建议,值得一读。在这里,您可以找到为什么将其添加到语言中的历史概述
编辑:宫城所作的一些重要更正
相关问题 更多 >
编程相关推荐