You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取python-measurement中MeasureBase的原始输入值与单位

原生python-measurement库没有内置方法可以直接获取初始化时传入的原始单位和原始值。
这个库的设计逻辑就是,实例化度量对象时会把所有传入的不同单位的数值,全部换算成类预设的default_unit(默认基准单位)存在内部,初始化阶段传入的原始单位、原始输入值不会做持久化留存,对象生成后这部分信息就被丢弃了,不存在原生API能直接调取。

可行实现方案

1. 自定义混入类封装留存逻辑

写一个简单的混入类,在初始化方法执行前先捕获传入的单位参数和对应值,存为实例属性,业务里用的时候把混入类和对应度量类多继承即可,代码示例:

from measurement.base import MeasureBase
from measurement.measures import Volume, Weight

class SaveOriginMixin:
    def __init__(self, *args, **kwargs):
        # 适配业务常用的单单位传参场景
        if kwargs:
            self.origin_unit = next(iter(kwargs.keys()))
            self.origin_input_val = kwargs[self.origin_unit]
        super().__init__(*args, **kwargs)

    @property
    def origin_value(self):
        # 就算没存原始输入值,靠留存的单位也能从基准值换算回对应单位的数值
        return getattr(self, self.origin_unit)

# 按需封装业务要用的度量类型
class MyVolume(SaveOriginMixin, Volume):
    pass

class MyWeight(SaveOriginMixin, Weight):
    pass

测试效果:

>>> v = MyVolume(us_qt=1)
>>> print(v)
0.001 cubic_meter
>>> v.origin_unit
'us_qt'
>>> v.origin_value
1.0

2. Django/ORM存储场景加冗余字段

对接数据库读写的场景更简单,不需要改度量类的实现:除了库提供的度量字段存基准值之外,额外加两个字段:

  • 字符串类型字段存原始单位标识,比如us_qt
  • 数值类型字段存原始输入值
    写入数据的时候同步把原始单位、原始值写到这两个冗余字段里,读的时候直接取这两个字段的值就行,比改类实现的适配成本更低。

别尝试从数据库存的基准值反推原始单位,不同单位换算到基准值是多对一的关系,没有额外标记根本不可能准确判断当初输入的是什么单位。

内容的提问来源于stack exchange,提问作者chris Frisina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:15:41