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基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
Android应用开发中Action bar编写的入门教程
Feb 26 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
Python基本socket通信控制操作示例
Jan 30 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
python列表推导式入门学习解析
Dec 02 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
Python小白不正确的使用类变量实例
May 29 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去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
jquery CSS选择器笔记
2010/03/29 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
React优化子组件render的使用
2019/05/12 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
基于Python List的赋值方法
2018/06/23 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
python asyncio 协程库的使用
2021/01/21 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
党校学习自我鉴定
2014/02/24 职场文书
清扬洗发水广告词
2014/03/14 职场文书
爱心捐款倡议书
2014/04/14 职场文书
化工见习报告范文
2014/10/31 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
敬老院活动感想
2015/08/07 职场文书
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS