使用isinstance()与duck typing

时间:2014-11-16 15:45:14

标签: python matplotlib duck-typing isinstance

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

为此,我计划使用matplotlib.colors.colorConverter,它是将其他类型的输入转换为matplotlib RGBA颜色元组的类的实例。但是,它还会将浮动转换为灰度色彩图。这与我正在处理的软件包的现有功能相冲突,我认为这是不可取的。

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

我已经读过我通常应该编写一个接口代码,但在这种情况下,接口的功能与所需的功能不同。

2 个答案:

答案 0 :(得分:2)

为什么不写两个单独的函数,一个将输入视为颜色映射,另一个将其输入视为颜色?这将是解决问题的最简单方法,既可以避免意外,也可以为将来扩展功能留下空间。

答案 1 :(得分:1)

这有点主观,但我要说:一般来说,这不是一个好主意,但在这里您可以区分容器并且 类的实例是适当的(特别是当这些类本身可以迭代时,比如元组或字符串,并且这样做鸭子打字会相当棘手的)。

除了:通常建议对接口进行编码,但它比Python更适用于Java风格的静态语言,其中接口不需要&# 39; t确实存在,除非你计算抽象基类和abc模块等(What's the Python version for “Code against an interface, not an object”?中更深入的讨论)

很难说没有更多细节,但听起来你在这里建立一个facade比什么更接近,因此你应该可以自由使用你自己的(更整洁/更紧/不同) API,将用户与基础实现隔离开来(Matplotlib)。