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 相关文章推荐
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 Python
python实现的简单文本类游戏实例
Apr 28 Python
Python实现LRU算法的2种方法
Jun 24 Python
在Django的通用视图中处理Context的方法
Jul 21 Python
python字符串中的单双引
Feb 16 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
May 29 Python
详解python中的hashlib模块的使用
Apr 22 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
python使用glob检索文件的操作
May 20 Python
Python Matplotlib绘制条形图的全过程
Oct 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
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
php构造函数的继承方法
2015/02/09 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
jQuery使用手册之一
2007/03/24 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
python中的字典使用分享
2016/07/31 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
python 两种方法删除空文件夹
2020/09/29 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
COS美国官网:知名服装品牌
2019/04/08 全球购物
预备党员思想汇报
2014/01/08 职场文书
银行简历自我评价
2014/02/11 职场文书
小小的船教学反思
2014/02/21 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
Redis实现一个账号只能登录一个设备
2022/04/19 Redis