Python高级专题 - 类型转换的魔术方法

简介: Python高级专题 - 类型转换的魔术方法

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__方法。

目录
相关文章
|
4月前
|
Python
你真的会面向对象吗!解密Python“魔术方法”
你真的会面向对象吗!解密Python“魔术方法”
46 0
|
5月前
|
监控 测试技术 Python
颠覆传统!Python闭包与装饰器的高级实战技巧,让你的项目效率翻倍
【7月更文挑战第7天】Python的闭包与装饰器是强大的工具。闭包是能记住外部作用域变量的内部函数,常用于动态函数创建和工厂模式。例如,`make_power`返回含外部变量`n`的`power`闭包。装饰器则允许在不修改函数代码的情况下添加新功能,如日志或性能监控。`my_decorator`函数接收一个函数并返回包装后的函数,添加了前后处理逻辑。掌握这两者,可提升编程效率和灵活性。
43 3
|
4月前
|
数据处理 Python
Python 中的类型转换
【8月更文挑战第29天】
41 3
|
5月前
|
数据采集 Java C语言
Python面向对象的高级动态可解释型脚本语言简介
Python是一种面向对象的高级动态可解释型脚本语言。
43 3
|
5月前
|
机器学习/深度学习 数据采集 算法
Python编程语言进阶学习:深入探索与高级应用
【7月更文挑战第23天】Python的进阶学习是一个不断探索和实践的过程。通过深入学习高级数据结构、面向对象编程、并发编程、性能优化以及在实际项目中的应用,你将能够更加熟练地运用Python解决复杂问题,并在编程道路上走得更远。记住,理论知识只是基础,真正的成长来自于不断的实践和反思。
|
4月前
|
存储 程序员 Python
深入探讨Python中的变量和类型转换
【8月更文挑战第20天】
47 0
|
5月前
|
机器学习/深度学习 数据采集 人工智能
Python 是一种广泛使用的高级编程语言
【7月更文挑战第17天】Python 是一种广泛使用的高级编程语言
53 2
|
5月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
51 1
|
5月前
|
存储 算法 调度
惊呆了!Python高级数据结构堆与优先队列,竟然能这样优化你的程序性能!
【7月更文挑战第10天】Python的heapq模块实现了堆和优先队列,提供heappush和heappop等函数,支持O(log n)时间复杂度的操作。优先队列常用于任务调度和图算法,优化性能。例如,Dijkstra算法利用最小堆加速路径查找。堆通过列表存储,内存效率高。示例展示了添加、弹出和自定义优先级元素。使用堆优化程序,提升效率。
68 2
|
5月前
|
算法 调度 Python
Python高手必备!堆与优先队列的高级应用,掌握它们,技术路上畅通无阻!
【7月更文挑战第9天】Python的heapq模块实现了堆数据结构,提供O(log n)操作如`heappush`和`heappop`。堆是完全二叉树,用于优先队列,保证最大/最小元素快速访问。例如,最小堆弹出最小元素,常用于Dijkstra算法找最短路径、Huffman编码压缩数据及任务调度。通过`heappush`和`heappop`可创建和管理优先队列,如`(优先级, 数据)`元组形式。理解并运用这些概念能优化算法效率,解决复杂问题。
51 2
下一篇
DataWorks