关于python:使用isinstance()与duck typing

Using isinstance() versus duck typing

我正在编写一个与matplotlib的接口,它要求将浮点数列表视为与颜色映射相对应,但其他类型的输入则视为指定特定的颜色。

为此,我计划使用matplotlib.colors.colorConverter,这是一个类的实例,它将其他类型的输入转换为matplotlibrgba颜色元组。但是,它也会将浮动转换为灰度颜色映射。这与我正在开发的包的现有功能相冲突,我认为这是不可取的。

我的问题是:在使用colorConverter之前,使用isinstance()检查以确保我没有错误地处理浮动列表是否合适?有没有更好的方法我没想到?

我已经读过了,我通常应该对接口进行编码,但是在本例中,接口的功能与所需的不同。


为什么不编写两个单独的函数,一个将输入视为颜色映射,另一个将输入视为颜色?这将是处理问题的最简单方法,并且可以避免意外,并为将来扩展功能留出空间。


这有点主观,但我会说:一般来说,这不是一个好主意,但是在这里,当你区分一个容器和一个类的实例是适当的(特别是当,比如说,那些类本身可能是不可测的,比如元组或字符串,并且这样做的时候,duck输入会变得相当棘手)。

旁白:通常建议对接口进行编码,但它比Python更适用于Java风格的静态语言,其中接口不存在,除非您对抽象基类和EDCOX1 0位模块等进行计数(更深入地讨论Python版本中的"针对接口的代码,而不是对象")。

很难说没有更多的细节,但听起来你比任何事情都更接近于在这里建立一个外观,因此你应该可以自由地使用自己的(更整洁/更紧密/不同)API,将用户与底层实现(matplotlib)隔离开来。