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使用xlrd模块读写Excel文件的方法
May 06 Python
Python fileinput模块使用实例
May 28 Python
Python+django实现文件上传
Jan 17 Python
Python Web编程之WSGI协议简介
Jul 18 Python
python ddt数据驱动最简实例代码
Feb 22 Python
python 返回一个列表中第二大的数方法
Jul 09 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
Python修改列表值问题解决方案
Mar 06 Python
python调用私有属性的方法总结
Jul 24 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 Python
python实现计算图形面积
Feb 22 Python
Python函数中的不定长参数相关知识总结
Jun 24 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中操作Excel实例代码
2010/04/29 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
php操作MongoDB类实例
2015/06/17 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
jstree的简单实例
2016/12/01 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
Python学习笔记(二)基础语法
2014/06/06 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
python Kmeans算法原理深入解析
2019/08/23 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
Python爬虫开发与项目实战
2020/12/16 Python
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
一套VC试题
2015/01/23 面试题
中英双版中文教师求职信
2013/10/27 职场文书
小组合作学习反思
2014/02/18 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
家长建议怎么写
2014/05/15 职场文书