用魔法设定子类浮点型的值

时间:2017-03-08 21:45:13

标签: python magic-methods

我正在尝试实现一个有界的float类来学习魔术方法。到目前为止,我大部分都是从其他Stack Overflow示例中复制过来的,并且有这个:

class BoundedFloatError(TypeError, ValueError):
    pass


class BoundedFloat(float):

    def __new__(cls, float_string):
        try: return float.__new__(cls, float_string)
        except (TypeError, ValueError): raise BoundedFloatError(float_string)

    def __init__(self, value, minimum=0.0, maximum=1.0, default=0.5):
        self.minimum = minimum
        self.maximum = maximum
        self.default = default

    def __magic_setter_method__(self, value):    # what is this method?
        if self.minimum <= value <= self.maximum:
            # what goes here?


if __name__ == '__main__':

    y = BoundedFloat(3.14)
    print y, y.minimum, y.maximum, y.default, type(y)
    # 3.14 3.14 1.0 0.5 <class '__main__.BoundedFloat'>

    y = 16.7
    print y, type(y)
    # 16.7 <type 'float'>

我正在尝试创建一个新方法来设置值,同时仍保留子类浮点类型。搜索了魔术方法的文档之后,我还没有找到设置浮点数的方法,以便我可以捕获它并强制执行边界。有人能指出我正确的方向吗?

0 个答案:

没有答案