Why Can't `round` Be Defined For Non-floats?
Given a simple class like class Vector(object): def __init__(self, value): self.value = value def __abs__(self): return math.sqrt(sum([x**2 for x in self.va
Solution 1:
The __round__
special method was only introduced in Python 3. There is no support for the special method in Python 2.
You'll have to use a dedicated method instead of the function:
classVector(object):def__init__(self, value):
self.value = value
defround(self, n):
return [round(x, n) for x inself.value]
or you'd have to provide your own round()
function:
import __builtin__
defround(number, digits=0):
try:
return number.__round__(digits)
except AttributeError:
return __builtin__.round(number, digits)
You could even monkey-patch this into the __builtins__
namespace:
import __builtin__
_bltin_round = __builtin__.rounddefround(number, digits=0):
try:
hook = number.__round__
except AttributeError:
return _bltin_round(number, digits)
else:
# Call hook outside the exception handler so an AttributeError # thrown by its implementation is not maskedreturn hook(digits)
__builtin__.round = round
Post a Comment for "Why Can't `round` Be Defined For Non-floats?"