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获取网页上图片下载地址的方法
Mar 11 Python
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
快速入门python学习笔记
Dec 06 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 Python
python如何删除文件中重复的字段
Jul 16 Python
浅谈django url请求与数据库连接池的共享问题
Aug 29 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
Python list与NumPy array 区分详解
Nov 06 Python
Django关于admin的使用技巧和知识点
Feb 10 Python
Python3.7实现验证码登录方式代码实例
Feb 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
星际玩家的三大定律
2020/03/04 星际争霸
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
python线程的几种创建方式详解
2019/08/29 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
python之array赋值技巧分享
2019/11/28 Python
python获取栅格点和面值的实现
2020/03/10 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
大四自我鉴定范文
2013/10/06 职场文书
精彩的大学生自我评价
2013/11/17 职场文书
大学生两会学习心得体会
2014/03/10 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
一文简单了解MySQL前缀索引
2022/04/03 MySQL