【发布时间】:2016-12-02 17:46:57
【问题描述】:
我正在编写一个用于 msgpack-python 的自定义编码函数。我希望在让 msgpack-python 序列化它之前将任何 numpy.float 对象转换为浮点数。我的编码函数如下所示:
def encode_custom(obj):
if issubclass(obj.__class__,np.float):
obj = float(obj)
return obj
效果很好。但是,How do I check (at runtime) if one class is a subclass of another? 的最高投票答案表明这是一个坏主意。我认为这是因为这种方法不使用鸭式打字。
有没有办法duck-type编码函数?
编辑:请注意,我只希望类似浮动的对象转换为浮动。更好地表示为另一种类型(例如 int)的对象应使用该其他类型,即使它们可以float()'d 转换为浮点对象。
【问题讨论】:
-
try: return float(obj) except ValueError: return obj -
@SethMMorton 这也将整数转换为浮点数。
-
在某些情况下这是个坏主意。您已经明确表示要转换 numpy 浮点数,所以这看起来不错。但是我建议只使用
isinstance(obj, np.float)。 -
仅供参考:
numpy.float只是 Python 内置float的另一个名称。如果每个人都使用float而不是np.float,那就更清楚了。
标签: python numpy floating-point subclass duck-typing