魔术方法介绍

2024-09-08 12:12
文章标签 方法 介绍 魔术

本文主要是介绍魔术方法介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、基本介绍

1、什么是魔术方法

2、常见的魔术方法

二、__str__

1、基本介绍

2、应用实例:请输出Monster对象的属性信息

三、__eq__

1、基本介绍

2、应用实例

四、其它几个魔术方法

1、其它魔术方法

2、应用实例


参考文档:3. 数据模型 — Python 3.12.5 文档

一、基本介绍

1、什么是魔术方法

1)在Python中,所有以双下划线__包起来的方法,统称为Magic Method(魔术方法),它是一种特殊的方法,普通方法需要调用,而魔术方法不需要调用就可以自动执行

2)魔术方法在类或对象的某些事件发生时会自动执行,让类具有神奇的“魔力”。如果希望根据自己的程序定制特殊功能的类,那么就需要对这些方法进行重写

3)Python中常用的运算符、for循环、以及类操作等都是运行在魔术方法之上的

2、常见的魔术方法

二、__str__

1、基本介绍

1)打印对象默认返回:类型名+对象内存地址,子类往往重写__str__,用于返回对象的属性信息

2)重写__str__方法,print(对象)或str(对象)时,都会自动调用该对象的__str__

2、应用实例:请输出Monster对象的属性信息

class Monster:def __init__(self,name,age,gender):self.name=nameself.age=ageself.gender=genderm=Monster("青牛怪",500,"男")
print(m)  # 默认输出类型+地址

class Monster:def __init__(self,name,age,gender):self.name=nameself.age=ageself.gender=gender"""1.在默认情况下,调用的是父类object的__str__2.父类object的__str__返回的就是 类型+地址3.可以根据需要重写__str__"""# 重写__str__def __str__(self):# return super().__str__()return f"{self.name} {self.age} {self.gender}"m=Monster("青牛怪",500,"男")
print(m)  # 重写__str__之后输出对象的属性信息

三、__eq__

1、基本介绍

1)==是一个比较运算符:对象之间进行比较时,比较的是内存地址是否相等,即判断是不是同一个对象

2)重写__eq__方法,可以用于判断对象内容/属性是否相等

2、应用实例

1)判断两个Person对象的内容是否相等,如果两个Person对象的各个属性值都一样,则返回true,反之false

2)Person类,属性(name,age,gender)

class Person:def __init__(self,name,age,gender):self.name=nameself.age=ageself.gender=genderp1=Person("smith",21,"男")
p2=Person("smith",21,"男")
# == 默认是比较两个对象的地址是否相同
print(f"p1==p2:{p1==p2}")  # False
class Person:def __init__(self,name,age,gender):self.name=nameself.age=ageself.gender=gender# 重写__eq__def __eq__(self, other):# 判断other是不是Personif isinstance(other,Person):return self.name==other.name and \self.age==other.age and \self.gender==other.genderreturn False# 没有重写__eq__前,==比较的是内存地址
# 重写__eq__后,==比较的是属性/内容
p1=Person("smith",21,"男")
p2=Person("smith",21,"男")
print(f"p1==p2:{p1==p2}")  # True

四、其它几个魔术方法

1、其它魔术方法

2、应用实例

1)根据Person对象的年龄进行比较大小,重写相应的魔术方法

2)Person类,属性(name,age,gender)

class Person:def __init__(self,name,age,gender):self.name=nameself.age=ageself.gender=gender# 重写__eq__def __eq__(self, other):# 判断other是不是Personif isinstance(other,Person):return self.name==other.name and \self.age==other.age and \self.gender==other.genderreturn False# 重写__lt__def __lt__(self, other):# 判断other是不是Personif isinstance(other, Person):return self.age<other.agereturn "类型不一致,不能比较"# 重写__lt__def __le__(self, other):# 判断other是不是Personif isinstance(other, Person):return self.age<=other.agereturn "类型不一致,不能比较"# 重写__ne__def __ne__(self, other):return not self.__eq__(other)p1=Person("smith",21,"男")
p2=Person("smith",21,"男")
print(f"p1<p2:{p1<p2}")  # False
print(f"p1<=p2:{p1<=p2}")  # True
print(f"p1!=p2:{p1!=p2}")  # False

这篇关于魔术方法介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148074

相关文章

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过