魔术方法介绍

news2024/11/11 19:27:50

目录

一、基本介绍

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=name
        self.age=age
        self.gender=gender

m=Monster("青牛怪",500,"男")
print(m)  # 默认输出类型+地址

class Monster:
    def __init__(self,name,age,gender):
        self.name=name
        self.age=age
        self.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=name
        self.age=age
        self.gender=gender

p1=Person("smith",21,"男")
p2=Person("smith",21,"男")
# == 默认是比较两个对象的地址是否相同
print(f"p1==p2:{p1==p2}")  # False
class Person:
    def __init__(self,name,age,gender):
        self.name=name
        self.age=age
        self.gender=gender

    # 重写__eq__
    def __eq__(self, other):
        # 判断other是不是Person
        if isinstance(other,Person):
            return self.name==other.name and \
                self.age==other.age and \
                self.gender==other.gender
        return 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=name
        self.age=age
        self.gender=gender

    # 重写__eq__
    def __eq__(self, other):
        # 判断other是不是Person
        if isinstance(other,Person):
            return self.name==other.name and \
                self.age==other.age and \
                self.gender==other.gender
        return False

    # 重写__lt__
    def __lt__(self, other):
       # 判断other是不是Person
       if isinstance(other, Person):
          return self.age<other.age
       return "类型不一致,不能比较"

# 重写__lt__
    def __le__(self, other):
       # 判断other是不是Person
       if isinstance(other, Person):
          return self.age<=other.age
       return "类型不一致,不能比较"

    # 重写__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.coloradmin.cn/o/2115390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SOMEIP_ETS_096: SD_Check_TCP_Connection_before_SubscribeEventgroup

测试目的&#xff1a; 验证DUT&#xff08;Device Under Test&#xff09;在未事先建立TCP连接的情况下&#xff0c;对于包含TCP端点选项的SubscribeEventgroup请求&#xff0c;能够拒绝该请求并发送SubscribeEventgroupNAck。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&a…

堆排序Java

思路 这个代码还不错 https://blog.csdn.net/weixin_51609435/article/details/122982075 就是从下往上进行调整 1. 如何将数组映射成树 对于下面这颗树&#xff0c;原来的数组是&#xff1a; 好&#xff0c;如果调整的话&#xff0c;我们第一个应该调整的是最下边&#x…

JVM面试真题总结(三)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 解释-下Full GC? Full GC&#xff0c;也被称为Major GC&#xff…

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操…

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节&#xff0c;字符串小于等于15直接保存在栈上&#xff0c;超过之后才会使用new分配。

网络学习-eNSP配置多交换机VLAN

实验环境 通过华为eNSP软件实现 1.两台S3700交换机 2.四台电脑PC1&#xff1a;192.168.0.1PC2&#xff1a;192.168.0.2PC3&#xff1a;192.168.0.3PC4&#xff1a;192.168.0.4PC11&#xff1a;192.168.0.11PC22&#xff1a;192.168.0.22PC33&#xff1a;192.168.0.33PC44&…

SpringBoot开启多端口探究--基于多ApplicationContext

文章目录 前情提要一、思路概要二、具体实现三、其他问题父子关系部分依赖 总结 前情提要 前面探讨了management端口开启&#xff0c;grpc端口开启&#xff0c;本文继续探讨在SpringApplication中开启多个端口的方式之多ApplicationContext, 相比management端口基于多WebServe…

AI绘画工具排行榜:探索最受欢迎的AI绘图软件特点与选择指南

AI绘画工具各有优势&#xff0c;从开放性到对特定语言和文化的支持&#xff0c;以及对图像细节和艺术性的不同关注点&#xff0c;根据具体需求选择合适的工具 MidJourney 图片品质卓越&#xff0c;充满独特创意&#xff0c;初期能够免费获取数十账高质量图片&#xff0c;整个生…

uuid.js 使用

相关代码 import { NIL } from "uuid";/** 验证UUID* 为空 则返回 false* param uuid* returns {boolean}*/ export function MyUUIDValidate(uuid: any): boolean {if (typeof uuid "string" && uuid ! NIL) { //uuid ! NIL 判断是否是默认值00…

C++笔记---vector

1. vector的介绍 vector其实就是我们所熟知的顺序表&#xff0c;但其是作为STL中的一个类模板而存在。 也就是说&#xff0c;vector是可以用来存储任意类型数据的顺序表&#xff0c;既可以是内置类型&#xff0c;也可以是自定义类型&#xff0c;或是STL中的其他容器。 vecto…

学习算法的类型

学习算法的类型 一、说明 嘿&#xff0c;好奇的伙伴们&#xff01;今天&#xff0c;让我们踏上一段激动人心的机器学习算法领域之旅。&#x1f680; 如果你和我一样&#xff0c;你可能会发现机器学习的世界非常迷人&#xff0c;有时甚至有点让人不知所措。但不要害怕&#xf…

Qt Widget核心属性

文章目录 前言enabledgeometrywindowTitlewindowIconwindowOpacitycursorfonttoolTipfocusPolicystyleSheet 前言 Qt中的各种控件&#xff0c;都是继承自QWidget类&#xff0c;了解这个类的属性方法之后&#xff0c;后续的控件也通用 enabled enabled描述了一个控件是否处于…

未来工作趋势:零工小程序在共享经济中的作用

经济在不断发展的同时&#xff0c;科技也在飞速发展。零工经济作为一种新兴的工作模式&#xff0c;正在全球范围内迅速崛起。特别是在中国&#xff0c;随着数字经济的蓬勃发展和共享经济模式的深入推广&#xff0c;零工小程序在促进就业、提升资源利用效率方面显示出了巨大的潜…

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知&#xff0c;2024年AMC10美国数学竞赛的报名还有两周&#xff0c;正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间&#xff0c;认真备考&#xff0c;最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢&#xff1f;做真题&#xff0c;吃透真题和…

FreeRTOS学习笔记—②RTOS的认识及任务管理篇

由于正在学习韦东山老师的RTOS课程&#xff0c;结合了网上的一些资料&#xff0c;整理记录了下自己的感悟&#xff0c;用于以后自己的回顾。如有不对的地方请各位大佬纠正。 文章目录 一、RTOS的优势二、RTOS的核心功能2.1 任务管理2.1.1 任务的创建2.1.2 任务的删除*2.1.3 任…

Windows系统安装node.js环境并创建本地服务使用内网穿透发布至公网

目录 前言 1.安装Node.js环境 2.创建node.js服务 3. 访问node.js 服务 4.内网穿透 4.1 安装配置cpolar内网穿透 4.2 创建隧道映射本地端口 5.固定公网地址 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Windows系统安装node.js环…

Arch - 架构安全性_认证(Authentication)的标准和实现

文章目录 OverView认证的标准认证的基础认证的范围认证的标准与实践HTTP认证框架Web认证&#xff08;表单认证&#xff09;WebAuthn标准认证流程示例&#xff1a;WebAuthn 小结 认证的实现JAASSpring Security 和 Shiro小结 OverView 即使只限定在“软件架构设计”这个语境下&…

MonoHuman: Animatable Human Neural Field from Monocular Video 精读

一、共享双向变形模块 1. 模块的核心思想 共享双向变形模块的核心目标是解决从单目视频中生成不同姿态下的3D人体形状问题。因为视频中的人物可能处于各种动态姿态下&#xff0c;模型需要能够将这些不同姿态的几何形状进行变形处理&#xff0c;以适应标准的姿态表示并生成新的…

# VMware 共享文件

VMware tools快速安装 VMware 提供了 open-vm-tools&#xff0c;这是 VMware 官方推荐的开源工具包&#xff0c;通常不需要手动安装 VMware Tools&#xff0c;因为大多数 Linux 发行版&#xff08;包括 Ubuntu、CentOS 等&#xff09;都包含了 open-vm-tools&#xff0c;并且已…

FreeRTOS内部机制学习02(消息队列深度学习)

文章目录 队列的核心以及好处队列的核心队列的好处 深入源码了解队列机制深入队列读取操作深入队列写入操作读写队列出超时时间 信号量深入信号量获取以及释放操作 互斥量互斥量和信号量的不同深入源码看优先级继承是怎么操作到的 队列的核心以及好处 队列的核心 队列的核心就…