对内置类型进行子类化,并在需要时使用实际值

时间:2013-12-18 16:19:19

标签: python

我想要的是什么:

  1. 一个行为类似于float的对象,我的意思是支持float支持的大多数操作,因此它可以用在任何表达式中float也可以使用。
  2. 在需要之前,对象必须没有值。
  3. 某种懒惰 float

    动机:

    对象表示数据库中的值,对象的实际值在DB中(获取其值可能很昂贵),同样在分配对象时或在某些操作下,它必须更新DB中的值(比如操作按值增加,应将其建模为对象的方法)。备注:如果我们只想增加值,我们不需要也不想从数据库中获取实际值。

    问题:可以继承float并覆盖其中一些(或仅一个)方法来实现建议的目标吗?

    注意:拜托,我知道问题的解决方案可能(几乎可以肯定)并不是最好的,但我只是作为一个例子发布了它,如果你想要我试着回答this question在原始问题中为问题提供更好的解决方案,谢谢。

1 个答案:

答案 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)