Python类型转换的魔术方法详解
作者:李俊才 发布时间:2022-04-16 12:49:06
本文讨论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值,即True
或False
。
4.__int__
、__float__
和__complex__
方法
如果一个对象定义了一个返回int类型的__int__
方法,那么该对象被传递给int的构造函数时,int方法会被调用。类似地,若对象定义了__float__
方法和__complex__
方法 ,也会在各自传递给float或complex的构造函数时被调用。另外,python2中拥有Long类型(而python3中不再拥有),因此在python2中相应地有__long__
方法。
来源:https://blog.csdn.net/qq_28550263/article/details/111506439


猜你喜欢
- python的百分号输出比较奇怪,代码如下print('%s%%'%(5))#这样就能输出‘5%'来源:https:
- 本文介绍了pandas中的series数据类型详解,分享给大家,具体如下:import pandas as pdimport numpy a
- 本文实例分析了Python二分法搜索算法。分享给大家供大家参考。具体分析如下:今天看书时,书上提到二分法虽然道理简单,大家一听就明白但是真正
- 1 慢查询定义指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句。慢查询日志就是记录这些sql的日志。
- import numpy as npimport matplotlib.pyplot as pltimport math# Python实现
- 一.什么是RedisRedis是一个非关系型数据库,具有很高的存取性能,一般用作缓存数据库,减少正常存储数据库的压力。Redis可以存储键与
- Python3安装第三方爬虫库BeautifulSoup4,供大家参考,具体内容如下在做Python3爬虫练习时,从网上找到了一段代码如下:
- jupyter notebook其实是可以使用 argparse来调用参数的,只要把参数转为list即可。不能在jupyter notebo
- 前言Python真的是无所不能,原因就是因为Python有数目庞大的库,无数的现成的轮子,让你做很多很多应用都非常方便。wifi跟我们的生活
- 现在的需求是:下拉框中要是选择加盟商让其继续选择学校,要是选择平台管理员则不需要选择学校。隐藏选择下拉列表。选择枚举值:/// <su
- 本文实例讲述了python访问系统环境变量的方法。分享给大家供大家参考。具体如下:#----------------------------
- 两列布局的定宽自适应已经详解了,三列浮动中有两列定宽一列自适应的也详解了,那么该说说三列浮动中两列自适应一列定宽的布局了。中间定宽,左右两侧
- 前言前面在 BeanShell 里面是通过 java 脚本实现请求的预处理,jmeter里面也可以调用python的脚本,需安装 jytho
- 今天帮助同事解决一个问题,问题是她做的一套页面在FF下显示正常,在IE6下样式却没有效果,也就是没有应用样式。最终发现是编码不匹配的问题,c
- 有两种类型的回调函数:blocking callbacks (also known as synchronous callbacks or
- 经典鼠标控制左右滚动,图片间隔无缝滚动,悬停滚动,图片控制左右滚动JavaScript代码<!DOCTYPE html PUBLIC
- 我们的每期话题,团队在内部都会通过邮件进行一番讨论,随着讨论的激烈,往往能碰撞出很多有意义的观点,因此,将讨论内容分享出来,有兴趣的朋友可以
- 一、renderer<meta name="renderer" content="webkit|ie-c
- 1、需求当工作在UNIX Shell下时,我们想使用常见的通配符模式(即:.py,Dat[0-9].csv等)来对文本做匹配。2、解决方案f
- 经常会遇到这样一个情况:浏览器弹出对话框,提示脚本运行时间过长,询问“停止”还是“继续”。那究竟各个浏览器是如何判断在什么时候才弹出此对话框