4. 数值转换函数重载

内置函数
对应的特殊方法
说明
int(obj)
__int__()
将对象转换为整数
float(obj)
__float__()
将对象转换为浮点数
complex(obj)
__complex__()
将对象转换为复数
bool(obj)
__bool__()
返回对象的布尔值(True 或 False)

数值转换函数重载说明

数值转换函数重载的方法的返回值类型必须和函数名类型一致。

示例

# 数值转换函数重载 示例

class ElectricCar:
    def __init__(self, brand, eq):
        self.brand = brand  # 品牌
        self.e_quantity = eq  # 电量

    def __int__(self):
        return int(self.e_quantity)

    def __float__(self):
        return float(self.e_quantity)

    def __complex__(self):
        return float(self.e_quantity) + 2j

    def __bool__(self):
        return self.e_quantity > 5

ec = ElectricCar('比亚迪', 2.1234)

print('int(ec):', int(ec))
print('float(ec):', float(ec))
print('complex(ec):', complex(ec))
print('bool(ec):', bool(ec))

if ec:
    print('ec为真!')
else:
    print('ec为假!')

complex 函数重载说明

  1. complex(obj) 方法优先取 __complex__(self) 方法的返回值作为结果返回。
  2. 如果自定义对象内没有 __complex__(self) 方法,则会用 __float__(self) 方法的返回值作为实部,用0j作为虚部返回。
  3. 如果再没有 __float__(self) 方法则会触发 TypeError 类型的错误并进入异常状态。

Python中任何对象都一定能取布尔值。

布尔测试函数重写说明:

  1. 当自定义类内有 __bool__(self) 方法时,以此方法的返回值作为 bool(obj) 的返回值。
  2. 当不存在 __bool__(self) 方法时,bool(x)返回 __len__(self) 方法的返回值是否为零来测试布尔值。
  3. 当不存在 __len__(self) 方法时,则直接返回True。