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 __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
浅谈python之新式类
Aug 12 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
Python3 实现减少可调用对象的参数个数
Dec 20 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
Python网络爬虫信息提取mooc代码实例
Mar 06 Python
Django封装交互接口代码
Jul 12 Python
python解压zip包中文乱码解决方法
Nov 27 Python
python使用pygame创建精灵Sprite
Apr 06 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获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
php常用文件操作函数汇总
2014/11/22 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
jquery ajax执行后台方法
2010/03/18 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
微信小程序实现表单校验功能
2020/03/30 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
python使用Berkeley DB数据库实例
2014/09/26 Python
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
python求前n个阶乘的和实例
2020/04/02 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
python属于解释语言吗
2020/06/11 Python
CSS3 简写animation
2012/05/10 HTML / CSS
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
what is the difference between ext2 and ext3
2015/08/25 面试题
个人能力自我鉴赏
2014/01/25 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android