Как я могу определить, приведен ли мой экземпляр класса Python как целое число или число с плавающей точкой? - PullRequest
2 голосов
/ 13 сентября 2011

У меня есть класс python для вычисления количества битов, когда они были указаны с использованием обозначений «Kb», «Mb» или «Gb».Я присвоил @property методу bits(), чтобы он всегда возвращал float (таким образом, он хорошо работает с int(BW('foo').bits)).

Однако у меня возникают проблемы с выяснением, что делать, когдачистый экземпляр класса приводится как int(), например int(BW('foo')).Я уже определил __repr__() для возврата строки, но кажется, что этот код не затрагивается при приведении экземпляра класса к типу.

Есть ли способ обнаружить в моем классе, что онприведение в качестве другого типа (и, следовательно, разрешить мне обрабатывать это дело)?

>>> from Models.Network.Bandwidth import BW
>>> BW('98244.2Kb').bits
98244200.0
>>> int(BW('98244.2Kb').bits)
98244200
>>> BW('98244.2Kb')
98244200.0
>>> type(BW('98244.2Kb'))
<class 'Models.Network.Bandwidth.BW'>
>>>
>>> int(BW('98244.2Kb'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: int() argument must be a string or a number, not 'BW'
>>>

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011
2 голосов
/ 13 сентября 2011

В основном то, что вы хотите, находится в пределах переопределения __trunc__ и __float__ в классе Models.Network.Bandwidth.BW:

#!/usr/bin/python

class NumBucket:

    def __init__(self, value):
        self.value = float(value)

    def __repr__(self):
        return str(self.value)

    def bits(self):
        return float(self.value)

    def __trunc__(self):
        return int(self.value)

a = NumBucket(1092)
print a
print int(a)
print int(a.bits())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...