Python类型转换魔术方法:__str__、__bool__等详解
本文详解Python中实现类型转换的魔术方法,包括__str__用于字符串表示、__unicode__/__bytes__处理不同编码字符串、__bool__控制布尔值转换,以及__int__/__float__/__complex__处理数值类型。通过实例展示如何在自定义类中重写这些方法以优化对象转换行为。
本文讨论在Python中将复杂对象转换为简单数据类型或基础类型的常用魔术方法,这些方法在编程实践中具有重要作用。
__str__方法:自定义字符串表示
1、__str__方法。
在讲解该方法之前,我们先打开一个Jupyter Notebook,随意创建一个类,如下所示。使用str()方法输出该类的实例,观察返回结果:
class BarChart(object):
def __init__(self, x, y, labels,color):
self.x = x
self.y = y
self.labels = labels
self.color = color
def show(self):
pass
str(BarChart(x=[1,2,3,], y=[10,30,20],labels=['1','2','3']))
Out[1]:'<main.BarChart object at 0x0000017B5704D5B0>'
在日常开发中,形如<main.BarChart object at 0x0000017B5704D5B0>这样的输出通常没有实际意义。然而在Python中,str()方法常用于强制类型转换。如果我们希望将某个对象转换为字符串后具有特定含义,就需要用到魔术方法__str__。当对象传递给str构造函数时,会调用__str__方法。该方法接受一个位置参数(self),具体示例如下:
class BarChart(object):
def __init__(self, x, y, labels, color):
self.x = x
self.y = y
self.labels = labels
self.color = color
def show(self):
pass
def __str__(self):
return '我是一个bar图,我的颜色值为:'+self.color
str(BarChart(x=[1,2,3,], y=[10,30,20],labels=['1','2','3'],color='red'))
Out[2]:'我是一个bar图,我的颜色值为:red'
2、__unicode__方法和__bytes__方法
__unicode__与__bytes__:处理字符串编码
Python 2中的字符串是ASCII字符串,而Python 3采用Unicode字符串,并引入了bytes(字节串)类型。不同的字符串家族拥有各自的魔术方法:
- Python 2中提供了
__unicode__魔术方法,当对象传递给unicode构造函数时被调用,接受一个位置参数(self); - Python 3中提供了
__bytes__魔术方法,当对象传递给bytes构造函数时被调用,接受一个位置参数(self);
3、__bool__方法
__bool__:控制布尔值转换
原理类似,__bool__在对象传递给bool构造函数时被调用。但在Python 2和Python 3中,该方法的命名有所不同:
- 在Python 2中被命名为
__nonzero__方法; - 在Python 3中被命名为
__bool__方法。
尽管命名不同,两者的功能一致,均接受一个位置参数(self)并返回一个bool值,即True或False。
__int__/__float__/__complex__:数值类型转换
4、__int__、__float__和__complex__方法
如果一个对象定义了返回int类型的__int__方法,那么当该对象传递给int构造函数时,int方法会被调用。类似地,若对象定义了__float__方法和__complex__方法,则在分别传递给float或complex构造函数时被调用。此外,Python 2中拥有Long类型(Python 3中已移除),因此在Python 2中相应地有__long__方法。
到此这篇关于Python类型转换的魔术方法的文章就介绍到这了,更多相关Python类型转换魔术方法内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









