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实现在无须过多援引的情况下创建字典的方法
Sep 25 Python
在Python的循环体中使用else语句的方法
Mar 30 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
Python NumPy库安装使用笔记
May 18 Python
python的文件操作方法汇总
Nov 10 Python
selenium python浏览器多窗口处理代码示例
Jan 15 Python
TensorFlow实现Batch Normalization
Mar 08 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
python根据url地址下载小文件的实例
Dec 18 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
python实现的读取网页并分词功能示例
Oct 29 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/11/19 PHP
JS实现php的伪分页
2008/05/25 PHP
php检测文件编码的方法示例
2014/04/25 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
Django自定义分页效果
2017/06/27 Python
简单了解python模块概念
2018/01/11 Python
python3安装speech语音模块的方法
2018/12/24 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
年终自我鉴定
2013/10/09 职场文书
大学毕业生的自我鉴定
2013/11/30 职场文书
咨询公司各岗位职责
2013/12/02 职场文书
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
金融管理专业求职信
2014/07/10 职场文书
顶岗实习协议书
2015/01/29 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
MySQL批量更新不同表中的数据
2022/05/11 MySQL