特殊方法 | 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学习站

相关文章
|
14小时前
|
机器学习/深度学习 数据采集 数据可视化
利用Python进行历史数据预测:从入门到实践的两个案例分析
利用Python进行历史数据预测:从入门到实践的两个案例分析
10 1
|
4天前
|
Python
使用Python pandas的sort_values()方法可按一个或多个列对DataFrame排序
使用Python pandas的sort_values()方法可按一个或多个列对DataFrame排序。示例代码展示了如何按&#39;Name&#39;和&#39;Age&#39;列排序 DataFrame。先按&#39;Name&#39;排序,再按&#39;Age&#39;排序。sort_values()的by参数接受列名列表,ascending参数控制排序顺序(默认升序),inplace参数决定是否直接修改原DataFrame。
12 1
|
6天前
|
机器学习/深度学习 数据可视化 前端开发
【Python机器学习专栏】机器学习模型评估的实用方法
【4月更文挑战第30天】本文介绍了机器学习模型评估的关键方法,包括评估指标(如准确率、精确率、召回率、F1分数、MSE、RMSE、MAE及ROC曲线)和交叉验证技术(如K折交叉验证、留一交叉验证、自助法)。混淆矩阵提供了一种可视化分类模型性能的方式,而Python的scikit-learn库则方便实现这些评估。选择适合的指标和验证方法能有效优化模型性能。
|
6天前
|
机器学习/深度学习 自然语言处理 语音技术
【Python 机器学习专栏】Python 深度学习入门:神经网络基础
【4月更文挑战第30天】本文介绍了Python在深度学习中应用于神经网络的基础知识,包括神经网络概念、基本结构、训练过程,以及Python中的深度学习库TensorFlow和PyTorch。通过示例展示了如何使用Python实现神经网络,并提及优化技巧如正则化和Dropout。最后,概述了神经网络在图像识别、语音识别和自然语言处理等领域的应用,并强调掌握这些知识对深度学习的重要性。随着技术进步,神经网络的应用将持续扩展,期待更多创新。
|
6天前
|
机器学习/深度学习 算法 Python
【Python机器学习专栏】Python中的特征选择方法
【4月更文挑战第30天】本文介绍了机器学习中特征选择的重要性,包括提高模型性能、减少计算成本和增强可解释性。特征选择方法主要包括过滤法(如相关系数、卡方检验和互信息)、包装法(如递归特征消除和顺序特征选择)和嵌入法(如L1正则化和决策树)。在Python中,可利用`sklearn`库的`feature_selection`模块实现这些方法。通过有效的特征选择,能构建更优的模型并深入理解数据。
|
6天前
|
机器学习/深度学习 数据采集 数据可视化
【Python 机器学习专栏】数据缺失值处理与插补方法
【4月更文挑战第30天】本文探讨了Python中处理数据缺失值的方法。缺失值影响数据分析和模型训练,可能导致模型偏差、准确性降低和干扰分析。检测缺失值可使用Pandas的`isnull()`和`notnull()`,或通过可视化。处理方法包括删除含缺失值的行/列及填充:固定值、均值/中位数、众数或最近邻。Scikit-learn提供了SimpleImputer和IterativeImputer类进行插补。选择方法要考虑数据特点、缺失值比例和模型需求。注意过度插补和验证评估。处理缺失值是提升数据质量和模型准确性关键步骤。
|
6天前
|
机器学习/深度学习 算法 数据挖掘
【Python 机器学习专栏】Python 机器学习入门:基础概念与流程
【4月更文挑战第30天】本文介绍了Python在机器学习中的重要性,机器学习的基础概念和分类,包括监督学习、非监督学习和强化学习。Python因其丰富的库(如Scikit-learn、TensorFlow、PyTorch)、简单易学的语法和跨平台性在机器学习领域广泛应用。文章还概述了机器学习的基本流程,包括数据收集、预处理、特征工程、模型训练与评估等,并列举了常用的Python机器学习算法,如线性回归、逻辑回归、决策树和支持向量机。最后,讨论了Python机器学习在金融、医疗、工业和商业等领域的应用,鼓励读者深入学习并实践这一技术。
|
7天前
|
API 数据库 Python
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
|
7天前
|
机器学习/深度学习 数据可视化 数据挖掘
实用技巧:提高 Python 编程效率的五个方法
本文介绍了五个提高 Python 编程效率的实用技巧,包括使用虚拟环境管理依赖、掌握列表推导式、使用生成器提升性能、利用装饰器简化代码结构以及使用 Jupyter Notebook 进行交互式开发。通过掌握这些技巧,可以让你的 Python 编程更加高效。
|
7天前
|
数据可视化 数据处理 Python
Python有很多创建图表的常用方法
Python的图表创建工具有多种,如基础的Matplotlib用于绘制各类图表,包括线图和柱状图等;Seaborn是Matplotlib的扩展,擅长复杂可视化如热力图和回归图;Plotly和Bokeh提供交互式图表,适合高维数据展示,支持散点图、线图等;Pandas虽主要是数据处理库,但也具备基本绘图功能;Pygal专注于生成可缩放矢量图,如线图和饼图,支持SVG输出;而Altair基于Vega,适用于交互式和高维数据的可视化。选择哪种库取决于具体需求和图表类型。
17 2