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中的yield使用方法
Feb 11 Python
python用来获得图片exif信息的库实例分析
Mar 16 Python
Python的Django框架中的Context使用
Jul 15 Python
python通过文件头判断文件类型
Oct 30 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
pygame游戏之旅 添加键盘按键的方法
Nov 20 Python
树莓派实现移动拍照
Jun 22 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
Keras中 ImageDataGenerator函数的参数用法
Jul 03 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
python爬虫破解字体加密案例详解
Mar 02 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 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
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
python3中zip()函数使用详解
2018/06/29 Python
python中wx模块的具体使用方法
2020/05/15 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
python 带时区的日期格式化操作
2020/10/23 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
德国网上花店:Valentins
2018/08/15 全球购物
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
小学语文教学随笔
2015/08/14 职场文书
python对文档中元素删除,替换操作
2022/04/02 Python
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫
nginx 配置指令之location使用详解
2022/05/25 Servers