如何检测我的python类实例是否转换为整数或浮点数?

时间:2011-09-13 14:26:41

标签: python class types casting

我有一个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 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

基本上你想要的是在Models.Network.Bandwidth.BW类中重写__trunc____float__

#!/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())