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中用于检查英文字母大写的isupper()方法
May 19 Python
Python使用xlrd模块操作Excel数据导入的方法
May 26 Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
python实现list由于numpy array的转换
Apr 04 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
python 切换root 执行命令的方法
Jan 19 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
tensorflow如何继续训练之前保存的模型实例
Jan 21 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 Python
Python实现像awk一样分割字符串
Sep 15 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生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
js获取form的方法
2015/05/06 Javascript
简述AngularJS相关的一些编程思想
2015/06/23 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
Python中每次处理一个字符的5种方法
2015/05/21 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
介绍一下JMS编程步骤
2015/09/22 面试题
几个MySql的面试题
2013/04/22 面试题
校园报刊亭的创业计划书
2014/01/02 职场文书
投标担保书范文
2014/04/02 职场文书
2014会计年终工作总结
2014/12/20 职场文书
2015年党员承诺书
2015/01/21 职场文书
新学期感想
2015/08/10 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书