我想要的是什么:
float
的对象,我的意思是支持float
支持的大多数操作,因此它可以用在任何表达式中float
也可以使用。某种懒惰 float
。
动机:
对象表示数据库中的值,对象的实际值在DB中(获取其值可能很昂贵),同样在分配对象时或在某些操作下,它必须更新DB中的值(比如操作按值增加,应将其建模为对象的方法)。备注:如果我们只想增加值,我们不需要也不想从数据库中获取实际值。
问题:可以继承float
并覆盖其中一些(或仅一个)方法来实现建议的目标吗?
注意:拜托,我知道问题的解决方案可能(几乎可以肯定)并不是最好的,但我只是作为一个例子发布了它,如果你想要我试着回答this question在原始问题中为问题提供更好的解决方案,谢谢。
答案 0 :(得分:3)
您要做的是ducktyping
。你可以在Python中轻松地做到这一点。
def MyPuppyFloat(float):
...
然后您可以使用以下方法emulate float type
object.__add__(self, other)
object.__sub__(self, other)
object.__mul__(self, other)
object.__floordiv__(self, other)
object.__mod__(self, other)
object.__divmod__(self, other)
object.__pow__(self, other[, modulo])
object.__lshift__(self, other)
object.__rshift__(self, other)
object.__and__(self, other)
object.__xor__(self, other)
object.__or__(self, other)
object.__div__(self, other)
object.__truediv__(self, other)
object.__radd__(self, other)
object.__rsub__(self, other)
object.__rmul__(self, other)
object.__rdiv__(self, other)
object.__rtruediv__(self, other)
object.__rfloordiv__(self, other)
object.__rmod__(self, other)
object.__rdivmod__(self, other)
object.__rpow__(self, other)
object.__rlshift__(self, other)
object.__rrshift__(self, other)
object.__rand__(self, other)
object.__rxor__(self, other)
object.__ror__(self, other)
object.__neg__(self)
object.__pos__(self)
object.__abs__(self)
object.__invert__(self)
object.__complex__(self)
object.__int__(self)
object.__long__(self)
object.__float__(self)
object.__oct__(self)
object.__hex__(self)