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值,即TrueFalse

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,类型转换,魔术方法
0
投稿

猜你喜欢

  • 简单实现python画圆功能

    2021-06-06 02:39:36
  • SQL Server 总结复习 (二)

    2012-10-07 10:35:00
  • Python生成随机数的方法详解(最全)

    2023-05-04 12:36:08
  • python pandas遍历每行并累加进行条件过滤方式

    2023-08-07 12:41:54
  • 深入了解SQL Server 2008 商业智能平台

    2009-01-15 13:03:00
  • Flask中基于Token的身份认证的实现

    2022-11-20 06:45:53
  • 2008年个性设计挂历参考

    2007-12-29 20:30:00
  • python dlib人脸识别代码实例

    2021-04-05 12:57:33
  • 超实用的全新JavaScript事件Scrollend实例详解

    2024-04-16 10:27:49
  • python实现LRU热点缓存及原理

    2022-01-08 01:26:15
  • go mod 安装依赖 unkown revision问题的解决方案

    2024-05-09 14:59:34
  • 用Python编写简单的定时器的方法

    2022-03-15 07:20:32
  • 详解Python各大聊天系统的屏蔽脏话功能原理

    2021-02-23 13:53:44
  • ini_set的用法介绍

    2023-11-15 07:31:56
  • Django实现CAS+OAuth2的方法示例

    2023-01-26 17:32:46
  • python matplotlib工具栏源码探析二之添加、删除内置工具项的案例

    2022-05-16 19:31:22
  • Python生成随机数详解流程

    2023-03-31 15:21:33
  • pandas学习之df.fillna的具体使用

    2023-10-16 20:34:08
  • Python使用openpyxl模块处理Excel文件

    2021-10-03 06:45:10
  • spark编程python实例解读

    2023-06-02 06:12:52
  • asp之家 网络编程 m.aspxhome.com