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中pygame模块用法实例
Oct 09 Python
详解python时间模块中的datetime模块
Jan 13 Python
Python基础知识_浅谈用户交互
May 31 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
详解小白之KMP算法及python实现
Apr 04 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
Python库安装速度过慢解决方案
Jul 14 Python
详解python内置模块urllib
Sep 09 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 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
ajax缓存问题解决途径
2006/12/06 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
Python实现基于HTTP文件传输实例
2014/11/08 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
flask入门之表单的实现
2018/07/18 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
python SVD压缩图像的实现代码
2019/11/05 Python
关于Python中定制类的比较运算实例
2019/12/19 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
西班牙在线光学:Visual-Click
2020/06/22 全球购物
播音主持女孩的自我评价分享
2013/11/20 职场文书
安全生产检查通报
2014/01/29 职场文书
新闻编辑求职信
2014/07/13 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
2014年党小组工作总结
2014/12/20 职场文书
八年级英语教学计划
2015/01/23 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
运动会宣传语
2015/07/13 职场文书
公司开业致辞
2015/07/29 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers
java中如何截取字符串最后一位
2022/07/07 Java/Android