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引入导入自定义模块和外部文件的实例
Jul 24 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
详解Python做一个名片管理系统
Mar 14 Python
详解Python函数式编程—高阶函数
Mar 29 Python
使用Python函数进行模块化的实现
Nov 15 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
python异常处理之try finally不报错的原因
May 18 Python
对python pandas中 inplace 参数的理解
Jun 27 Python
如何用python免费看美剧
Aug 11 Python
matplotlib部件之套索Lasso的使用
Feb 24 Python
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
May 14 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开发入门教程之面向对象
2006/12/05 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
动态样式类封装JS代码
2009/09/02 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
Python常用模块介绍
2014/11/21 Python
详解Python中expandtabs()方法的使用
2015/05/18 Python
在python中画正态分布图像的实例
2019/07/08 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
Python修改列表值问题解决方案
2020/03/06 Python
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
校园安全演讲稿
2014/05/09 职场文书
预备党员综合考察材料
2014/05/31 职场文书
消防标语大全
2014/06/07 职场文书
庆祝国庆节标语
2014/10/09 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
宿舍卫生管理制度
2015/08/05 职场文书
导游词之天津古文化街
2019/11/09 职场文书