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

相关文章
|
2月前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
26天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
2月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
59 3
|
22天前
|
安全
Python-打印99乘法表的两种方法
本文详细介绍了两种实现99乘法表的方法:使用`while`循环和`for`循环。每种方法都包括了步骤解析、代码演示及优缺点分析。文章旨在帮助编程初学者理解和掌握循环结构的应用,内容通俗易懂,适合编程新手阅读。博主表示欢迎读者反馈,共同进步。
|
27天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
27天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
38 7
|
28天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
42 5
|
27天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
70 3
|
30天前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
163 5