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 相关文章推荐
Linux系统上Nginx+Python的web.py与Django框架环境
Dec 25 Python
Python实现网络端口转发和重定向的方法
Sep 19 Python
python构建基础的爬虫教学
Dec 23 Python
对python以16进制打印字节数组的方法详解
Jan 24 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
Python中的pathlib.Path为什么不继承str详解
Jun 23 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
python在不同条件下的输入与输出
Feb 13 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 Python
pytorch 中autograd.grad()函数的用法说明
May 12 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 URL编码解码函数代码
2009/03/10 PHP
超级简单的php+mysql留言本源码
2009/11/11 PHP
基于header的一些常用指令详解
2013/06/06 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
jquery简单体验
2007/01/10 Javascript
学习jquery之一
2007/04/27 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
JS组件Form表单验证神器BootstrapValidator
2016/01/26 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
python中remove函数的踩坑记录
2021/01/04 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
秘书岗位职责
2013/11/18 职场文书
校园安全标语
2014/06/07 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
批评与自我批评总结
2014/10/17 职场文书
安全教育日主题班会
2015/08/13 职场文书
中秋节主题班会
2015/08/14 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书