Python类型转换的魔术方法详解


Posted in Python onDecember 23, 2020

本文讨论python中将某个复杂对象转换为简单对象或数据类型的常用魔术放啊,这些在编程中是十分有用的。

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__方法

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值,即TrueFalse

4.__int____float____complex__方法

如果一个对象定义了一个返回int类型的__int__方法,那么该对象被传递给int的构造函数时,int方法会被调用。类似地,若对象定义了__float__方法和__complex__方法 ,也会在各自传递给float或complex的构造函数时被调用。另外,python2中拥有Long类型(而python3中不再拥有),因此在python2中相应地有__long__方法。

到此这篇关于Python类型转换的魔术方法的文章就介绍到这了,更多相关Python类型转换魔术方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python模拟登录12306的方法
Dec 30 Python
python删除列表中重复记录的方法
Apr 28 Python
python统计文本字符串里单词出现频率的方法
May 26 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
python中正则表达式的使用方法
Feb 25 Python
浅谈python中真正关闭socket的方法
Dec 18 Python
Python的高阶函数用法实例分析
Apr 11 Python
详解python中递归函数
Apr 16 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
python3 批量获取对应端口服务的实例
Jul 25 Python
matlab中imadjust函数的作用及应用举例
Feb 27 Python
使用keras根据层名称来初始化网络
May 21 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 #Python
python音频处理的示例详解
Dec 23 #Python
python 实现客户端与服务端的通信
Dec 23 #Python
python实现excel公式格式化的示例代码
Dec 23 #Python
python 基于opencv实现图像增强
Dec 23 #Python
python接口自动化框架实战
Dec 23 #Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 #Python
You might like
用PHP实现图象锐化代码
2007/06/14 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
2018/08/25 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python实现队列的方法
2015/05/26 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
详解python实现线程安全的单例模式
2018/03/05 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
python Kmeans算法原理深入解析
2019/08/23 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
python函数不定长参数使用方法解析
2019/12/14 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
自荐信格式简述
2014/01/25 职场文书
奠基仪式主持词
2014/03/20 职场文书
小学教研工作总结2015
2015/05/13 职场文书
公司人事管理制度
2015/08/05 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS