Python类型转换的魔术方法详解
本文讨论python中将某个复杂对象转换为简单对象或数据类型的常用魔术放啊,这些在编程中是十分有用的。
1、__str__方法。
在讲解本方法前我们先打开一个jupyternotebook,随意创建一个类如下,使用str()方法输出该类的实例看看返回了什么:
classBarChart(object): def__init__(self,x,y,labels,color): self.x=x self.y=y self.labels=labels self.color=color defshow(self): pass str(BarChart(x=[1,2,3,],y=[10,30,20],labels=['1','2','3']))
Out[1]:‘<main.BarChartobjectat0x0000017B5704D5B0>'
日常开发中,多数情况下,形如
classBarChart(object): def__init__(self,x,y,labels,color): self.x=x self.y=y self.labels=labels self.color=color defshow(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__方法
python2中的字符串是ASCII字符串,而python3中采用的是Unicode字符串,并且python3还引入了bytes(bytestring)类型。不同的字符串家族拥有自己的魔术方法:
- python2中出品了__unicode__魔术方法,该方法在对象传递给unicode的构造函数时被调用,接受一个位置参数(self);
- python3中出品了__bytes__魔术方法,该方法在对象传递给bytes的构造函数时被调用,接受一个位置参数(self);
3.__bool__方法
其实道理也是类似的,__bool__在对象传递给bool的构造函数时被调用。但是在python2和python3中对于该方法的命名不一样:
- 在python2中被命名为__nonzero__方法;
- 在python3中被命名为__bool__方法。
不过,两者的功能是一致的,它们都接受一个位置参数(self)并返回一个bool值,即True或False。
4.__int__、__float__和__complex__方法
如果一个对象定义了一个返回int类型的__int__方法,那么该对象被传递给int的构造函数时,int方法会被调用。类似地,若对象定义了__float__方法和__complex__方法,也会在各自传递给float或complex的构造函数时被调用。另外,python2中拥有Long类型(而python3中不再拥有),因此在python2中相应地有__long__方法。
到此这篇关于Python类型转换的魔术方法的文章就介绍到这了,更多相关Python类型转换魔术方法内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!