特殊方法 | Python从入门到精通:高阶篇之三十六

简介: 本节重点介绍了一些特殊方法的使用__str__()、__repr__()、比较大小、__len__()、object.__bool__(self),另外还有一些运算符。这些特殊方法的使用都是多态的体现。

垃圾回收 | Python从入门到精通:高阶篇之三十五

特殊方法

特殊方法,也称为魔术方法。
特殊方法都是使用__开头和结尾的。例如: __init__、__del__。
特殊方法一般不需要我们手动调用,需要在一些特殊情况下自动执行。
我们去官方文档去找一下。

image.png
image.png

我们接下来学习一些特殊方法。
定义一个Person类:

class Person(object):
    """人类"""
    def __init__(self, name , age):
        self.name = name
        self.age = age

# 创建两个Person类的实例        
p1 = Person('孙悟空',18)
p2 = Person('猪八戒',28)

# 打印p1
print(p1)

执行结果:

image.png

打印一个元组:

t = 1,2,3
print(t)

执行结果:

image.png

可以发现两个的执行结果不一致,是因为当我们打印一个对象时,实际上打印的是对象的中特殊方法__str__()的返回值。

__str__():
我们通过代码来看一下:

    def __str__(self):
        return 'Hello Person'   
 
 print(p1)  
  print(p2)  

执行结果:、

image.png

此时我们发现打印的结果是没有意义的,想要像元组一样输出对象中的信息,我们需要修改返回值:

    def __str__(self):
        return 'Person [name=%s , age=%d]'%(self.name,self.age) 

执行结果:

image.png

__str__()这个特殊方法会在尝试将对象转换为字符串的时候调用,它的作用可以用来指定对象转换为字符串的结果 (print函数)。
与__str__()类似的还有__repr__()。

__repr__():
通过代码来看一下:

    def __repr__(self):
        return 'Hello'   

print(repr(p1))

执行结果:

image.png

__repr__()这个特殊方法会在对当前对象使用repr()函数时调用,它的作用是指定对象在 ‘交互模式’中直接输出的效果。
比较大小:
直接执行结果

print(p1 > p2)

image.png

通过执行结果来看,我们需要解决的是如何支持大于、小于、等于这些运算符。

object.__lt__(self, other)    #  小于 <
object.__le__(self, other)   # 小于等于 <=
object.__eq__(self, other)     # 等于 ==
object.__ne__(self, other)    # 不等于 !=
object.__gt__(self, other)     # 大于 >
object.__ge__(self, other)    # 大于等于 >= 

我们来演示一下:

    def __gt__(self , other):
        return True

print(p1 > p2)
print(p2 > p1)

执行结果:

image.png

可以发现,如果直接返回True,不管怎么比较都是True,这是有问题的。
此时修改返回值代码:

        return self.age > other.age

执行结果:

image.png

__gt__会在对象做大于比较的时候调用,该方法的返回值将会作为比较的结果。他需要两个参数,一个self表示当前对象,other表示和当前对象比较的对象。简单来说:self > other

__len__():获取对象的长度

object.__bool__(self)

    def __bool__(self):
        return self.age > 17

print(bool(p1))

执行结果:

image.png

修改p1的age:

p1 = Person('孙悟空',8)

执行结果:

image.png

此时先将p1的age修改为之前的。
我们可以通过bool来指定对象转换为布尔值的情况。
我们来看一下:

if p1 :
    print(p1.name,'已经成年了')
else :
    print(p1.name,'还未成年了')

执行结果:

image.png

此时再去将年龄修改为8:
执行结果:

image.png

另外还有一些对对象的运算:

object.__add__(self, other)  
object.__sub__(self, other)   
object.__mul__(self, other)   
object.__matmul__(self, other)   
object.__truediv__(self, other)    
object.__floordiv__(self, other)   
object.__mod__(self, other)    
object.__divmod__(self, other)   
object.__pow__(self, other[, modulo])   
object.__lshift__(self, other)   
object.__rshift__(self, other)   
object.__and__(self, other)     
object.__xor__(self, other)      
object.__or__(self, other)      

我们在需要的时候去调用就可以了。这些方法都是对多态的体现。

配套视频课程,点击这里查看

获取更多资源请订阅Python学习站

相关文章
|
15天前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
124 1
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
|
8天前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
108 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
20天前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
94 5
|
20天前
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
|
2月前
|
机器学习/深度学习 数据采集 算法
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
138 4
|
1月前
|
数据采集 存储 XML
Python爬虫入门(1)
在互联网时代,数据成为宝贵资源,Python凭借简洁语法和丰富库支持,成为编写网络爬虫的首选。本文介绍Python爬虫基础,涵盖请求发送、内容解析、数据存储等核心环节,并提供环境配置及实战示例,助你快速入门并掌握数据抓取技巧。
|
1月前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
75 0
|
1月前
|
存储 缓存 安全
Python字典:从入门到精通的实用指南
Python字典如瑞士军刀般强大,以键值对实现高效数据存储与查找,广泛应用于配置管理、缓存、统计等场景。本文详解字典基础、进阶技巧、实战应用与常见陷阱,助你掌握这一核心数据结构,写出更高效、优雅的Python代码。
44 0

热门文章

最新文章

推荐镜像

更多