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 11 Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 Python
Python进行数据提取的方法总结
Aug 22 Python
Python正则简单实例分析
Mar 21 Python
python读写json文件的简单实现
Apr 11 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
django 将model转换为字典的方法示例
Oct 16 Python
详解python中的index函数用法
Aug 06 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
Python ORM编程基础示例
Feb 02 Python
Python作用域与名字空间原理详解
Mar 21 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
使用K.function()调试keras操作
2020/06/17 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
python中pop()函数的语法与实例
2020/12/01 Python
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
明星员工获奖感言
2014/08/14 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
影视广告专业求职信
2014/09/02 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android