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