python魔法方法魔法方法-属性转换和类的表示详解属性转换和类的表示详解
类型转换魔法类型转换魔法
类型转换魔法其实就是实现了str、int等工厂函数的结果,通常这些函数还有类型转换的功能,下面是一些相关的魔法方法:
•__int__(self)
•转换成整型,对应int函数。
•__long__(self)
•转换成长整型,对应long函数。
•__float__(self)
•转换成浮点型,对应float函数。
•__complex__(self)
•转换成 复数型,对应complex函数。
•__oct__(self)
•转换成八进制,对应oct函数。
•__hex__(self)
•转换成十六进制,对应hex函数。
•__index__(self)
•首先,这个方法应该返回一个整数,可以是int或者long。这个方法在两个地方有效,首先是 operator 模块中的index函数得到
的值就是这个方法的返回值,其次是用于切片操作,下面会专门进行代码演示。
•__trunc__(self)
•当 math.trunc(self) 使用时被调用.__trunc__返回自身类型的整型截取 (通常是一个长整型).
•__coerce__(self, other)
•实现了类型的强制转换,这个方法对应于 coerce 内建函数的结果(python3.0开始去掉了此函数,也就是该魔法方法也没意
义了,至于后续的版本是否重新加入支持,要视官方而定。)
•这个函数的作用是强制性地将两个不同的数字类型转换成为同一个类型,例如:
方法返回一个元祖,分别对应转换后的两个数字。其优先级为:复数>浮点数>长整型>整型。在转换的时候,会转换为两个参
数中优先级高的类型。当转换无法完成的时候,会触发 TypeError。
而当我们定义这个魔法方法时,如果转换无法完成,应该返回None。
这里有个重要的机制,当python进行运算的时候,如 1 + 1.0 时,会先调用 coerce 函数将其转换为同一个类型,然后再进行
运行,这也就是为什么 1 + 1.0 = 2.0,因为转换之后实际进行的运算为 1.0 +1.0。得到这样的结果也就不奇怪了。
代码示例:代码示例:
class Foo(object):
def __init__(self, x):
self.x = x
def __int__(self):
return int(self.x) + 1
def __long__(self):
return long(self.x) + 1