重新定义浮动的行为

时间:2013-08-13 21:28:28

标签: python operator-overloading

我有一个函数accuracy(n),用于设置浮点数n的精度。是否可以重载float类型的某些操作符,以便:

f = 1.5
x = f

将自动实施(在后台):

x = accuracy(f)

非常感谢

修改是否可以重载__eq__的{​​{1}}?

3 个答案:

答案 0 :(得分:1)

没有任何超载你可以做到这些确切的行将按照你描述的方式运行,但你可以得到类似的东西:

class Foo(object):
    @property
    def x(self):
        return self._x

    @x.setter
    def x(self, value):
        self._x = accuracy(value)

foo = Foo()

f = 1.5
foo.x = f     # set foo._x to accuracy(f)
print(foo.x)  # prints foo._x

答案 1 :(得分:0)

没有。但是您可以创建一个定义__float__()的类,以便在浮点上下文中使用对象时使用新值。

答案 2 :(得分:0)

不,但您可以编写一个类并定义__setattr__方法,以便调用您的函数来预处理分配给成员属性的数据。类似的东西:

def __setattr__(self, name, value):
   if isinstance(value, float):
      self.__dict__[name] = accuracy(value)
   else:
      self.__dict__[name] = value