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写一个贪吃蛇游戏实例代码
Aug 21 Python
Python自动化运维_文件内容差异对比分析
Dec 13 Python
python实现将多个文件分配到多个文件夹的方法
Jan 07 Python
Python比较配置文件的方法实例详解
Jun 06 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 Python
Python列表list常用内建函数实例小结
Oct 22 Python
python用quad、dblquad实现一维二维积分的实例详解
Nov 20 Python
Python模块future用法原理详解
Jan 20 Python
python代码实现TSNE降维数据可视化教程
Feb 28 Python
常用的10个Python实用小技巧
Aug 10 Python
Python使用OpenCV实现虚拟缩放效果
Feb 28 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
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
年度考核自我鉴定
2013/11/09 职场文书
毕业生自荐信
2013/12/14 职场文书
小学语文国培感言
2014/03/04 职场文书
技术总监管理职责范本
2014/03/06 职场文书
竞选班委演讲稿
2014/04/28 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
教师个人学习总结
2015/02/11 职场文书
公司员工手册范本
2015/05/14 职场文书
党员转正党支部意见
2015/06/02 职场文书
法律服务所工作总结
2015/08/10 职场文书
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python