У меня есть собственный класс, который (по историческим причинам) хранит высокоточные числа в виде двух целых чисел, представляющих целочисленную часть и нецелую часть нано-точности, например:
class Custom(object):
def __init__(self, int_, nano_):
self._int = int_
self._nano = nano_
def __float__(self):
return self._int + self._nano * 1e-9
def __int__(self):
return self._int
Однако, когдаЯ пытаюсь преобразовать это в numpy.longdouble
это происходит с помощью метода __float__
:
>>> a = Custom(1234567890, 123456789)
>>> print(numpy.longdouble(a))
1234567890.1234567165
>>> print(numpy.longdouble(float(a)))
1234567890.1234567165
>>> print(numpy.longdouble(a._int) + numpy.longdouble(a._nano * 1e-9))
1234567890.123456789
В последнем примере есть результат, который я хочу.Итак, вопрос в том, как я могу переопределить стандартное поведение приведения к numpy.longdouble
?