魔法方法介绍

【一】什么是魔法方法

  • 在类内部达到指定条件会自动触发的方法

【二】魔法方法

# 【1】__init__ : 实例化类得到对象的时候会自动触发
class Student(object):def __init__(self):print(f"实例化类的时候触发")     # 实例化类的时候触发
​
s = Student()
​
# 【2】__del__ : 当对象/对象关闭销毁的时候自动触发
# 场景:打开文件 open --> close
​class Student(object):def __init__(self):print(f"实例化类的时候触发")     # 实例化类的时候触发
​def __del__(self):print(f"当前在销毁的时候触发")    # 当前在销毁的时候触发
s = Student()
​
# 【3】__str__ : 在打印当前对象的时候可以定制打印当前对象的显示内容
# 必须且只能返回字符串类型的数据def __str__(self):print(f"打印当前对象的时候触发")return self.name# 【4】__repr__ : 交互解释器会触发def __repr__(self):print(f"与解释器交互的时候会触发")print('-------')return self.name# 【5】__doc__ : 打印类里面的注释内容的时候会触发# 对象.__doc__# 类.__doc____doc__ = "这是一个学生类"# 【6】__enter__  : 打开文档的时候会触发 with 语句触发def __enter__(self):print(f"打开文档的时候会触发")print('-------')return self
​
# 【7】__exit__ : 关闭文档的时候会触发 with 语句触发def __exit__(self, exc_type, exc_val, exc_tb):print(f"关闭文档的时候会触发")print('-------')...# 【8】__getattr__ : 获取当前对象的不存在的属性的时候触发# __getattribute__ : 值不存在的时候会触发异常def __getattr__(self, item):print(f'当前对象属性不存在的时候会触发')print(item)  # 就是不存在的属性的变量名# 父类里面有一个 __getattribute__ 能主动抛出值不存在的异常super().__getattribute__(item) # 【9】__setattr__ : 设置对象的属性值的时候会触发(包括 __init__ 初始化属性)def __setattr__(self, key, value):print(f'设置当前对象属性的时候会触发 对象.key=value')print(f"key :>>>>> {key}")print(f"value :>>>>> {value}")
# 【10】__setattr__ : 删除对象的属性值的时候会触发def __delattr__(self, item):print(f'当前在删除属性的时候会触发')print(item)print('-------')# 【11】__setitem__ : 对象[key]=value 设置值的时候会触发def __setitem__(self, key, value):print(f'设置属性的时候会触发 设置方式为 对象[key]=value')print(key, value)print('-------')# 用自己的名称空间字典放self.__dict__[key] = value# 【12】__getitem__ : 获取属性的时候会触发 设置方式为 对象[key]def __getitem__(self, item):print(f'获取属性的时候会触发 设置方式为 对象[key]')print('-------')return self.__dict__[item]
# 【13】__delitem__ : 删除属性的时候会触发 删除方式为 del 对象[key]def __delitem__(self, key):print(f'删除属性的时候会触发 删除方式为 del 对象[key]')print(key)print('-------')    
# 【14】__getattribute__: 负责正常对象。属性不存在的时候的报错方法def __getattribute__(self,item):# s = Student(name='dream')
# print(s)  # <__main__.Student object at 0x0000023FE2084E50>
# print(repr(s))  # 触发 __repr__
# print(s.__doc__)
# print(Student.__doc__)
​
# with Student('hope') as fp:
#     print(fp,type(fp))
​
# s = Student(name='dream')
# print(s.name)
# print(s.age)
​
# s.age = 18
# del s.age
# print(s.age)
​
# s['gender'] = 'male'
# print(s['gender'])
#
# del s['gender']           
# 【15】 __call__ :触发条件是当前类()或对象()调用的时候
​
class Student:def __init__(self):print(f'__init__被触发')
​def __call__(self, *args, **kwargs):print(f"__call__被触发")
​
​
# __call__ 可以放在两个位置
# 一个位置在当前对象的父类中 直接对象()会触发当前类的__call__
# 另一个位置在当前对象的父类的元类在会触发
s = Student()
s()
​
​
# callable:校验当前对象是否可被调用()
# 类本身可以可以被任意调用的
print(callable(Student))    # True
# 但是对象不可以直接被调用
# 想让对象也能()调用,就必须重写__call__
print(callable(s))      # True  如果将上面的__call__删掉 则s()就无法调用变为False

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13360.shtml

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

相关文章

在云服务器上运行StyleGAN3生成伪样本

首先是传入数据&#xff0c;这里我们不做赘述。 对于数据格式的裁剪&#xff0c;可以通过以下代码进行&#xff1a; from glob import glob from PIL import Image import os from tqdm import tqdm from tqdm.std import trangeimg_path glob(r"C:\Users\Administrato…

【Oracle篇】rman物理备份工具的基础理论概述(第一篇,总共八篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&am…

嵌入式是大坑的说法,是否与学生的信息不对称有关?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 目前也算是在搞嵌入式&#…

【深度学习】时空图卷积网络(STGCN),预测交通流量

论文地址&#xff1a;https://arxiv.org/abs/1709.04875 Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 文章目录 一、摘要二、数据集介绍美国洛杉矶交通数据集 METR-LA 介绍美国加利福尼亚交通数据集 PEMS-BAY 介绍美国…

Cocktail for Mac 激活版:一站式系统优化与管理神器

Cocktail for Mac是一款专为Mac用户打造的系统优化与管理工具&#xff0c;凭借其强大的功能和简便的操作&#xff0c;赢得了广大用户的喜爱。这款软件集系统清理、修复和优化于一身&#xff0c;能够帮助用户轻松解决Mac系统中的各种问题&#xff0c;提高系统性能。 Cocktail fo…

Leetcode-有效的括号(带图)

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/valid-parentheses/ 题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&…

在做题中学习(59):除自身以为数组的乘积

238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;前缀积和后缀积 思路&#xff1a;answer中的每一个元素都是除自己以外所有元素的和。那就处理一个前缀积数组和后缀积数组。 而前缀积(f[i])是&#xff1a;[0,i-1]所有元素的乘积 后缀…

如何利用香港多IP服务器实现定制化的网络服务

如何利用香港多IP服务器实现定制化的网络服务 在当今数字化快速发展的时代&#xff0c;企业对于网络服务的需求日益增加&#xff0c;尤其是对于定制化和高度可调整的网络服务的需求。香港&#xff0c;作为国际金融中心和数据中心的枢纽&#xff0c;提供了优越的网络基础设施和…

什么是蜜罐,在当前网络安全形势下,蜜罐能提供哪些帮助

在当前的互联网时代&#xff0c;网络安全威胁日益严峻&#xff0c;攻击手段层出不穷。为了应对这些威胁&#xff0c;网络安全专家们不断探索新的防御手段&#xff0c;在过去的几年里&#xff0c;一种更加积极主动的网络安全方法正在兴起。蜜罐技术便是这样一种备受瞩目的主动防…

【教学类-55-05】20240516图层顺序挑战(三格长条纸加黑色边框、3*3、5张,不重复7186张,9坐标点颜色哈希值去重、保留5色)

背景需求&#xff1a; 前期测试了4*4框格种的8种颜色&#xff0c;随机抽取7种&#xff0c;随机排列图层&#xff0c;去掉相同的图片、保留7种颜色的图片&#xff0c;最后获得5400张样图 【教学类-55-04】20240515图层顺序挑战&#xff08;四格长条纸加黑色边框、4*4、7张&…

Python程序设计 文件处理(二)

实验十二 文件处理 第1关&#xff1a;读取宋词文件&#xff0c;根据词人建立多个文件 读取wjcl/src/step1/宋词.txt文件&#xff0c; 注意&#xff1a;宋词文件的标题行的词牌和作者之间是全角空格&#xff08;" ")可复制该空格 在wjcl/src/step3/cr文件夹下根据每…

【CSND博客纪念】“创作纪念日:从灵感迸发到小有成就——我的CSND博客创作之旅”

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

记录下git的基本操作

初始化git git init git clone 拉取各分支的最新代码 git fetch 切换分支 git checkout 分支名 提交相关操作 git add . git commit -m “提交备注” 两个一起 git commit -am “提交备注” 如果需要撤销操作 git log 查询日志,提交id git revert git revert HEAD 撤销前一…

算法分析与设计复习__递归方程与分治

总结自&#xff1a;【算法设计与分析】期末考试突击课_哔哩哔哩_bilibili 1.递归&#xff0c;递归方程 1.1递归条件: 1.一个问题的解可以分解为几个子问题的解&#xff1b; 2.这个问题与分解之后的子问题&#xff0c;除了数据规模不同&#xff0c;求解思路完全一样; 3.存在…

【面试干货】一个数组的倒序

【面试干货】一个数组的倒序 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、实现思想 创建一个新的数组&#xff0c;然后将原数组的元素按相反的顺序复制到新数组中。 2、代码实现 package csdn;public class…

高效微砂沉淀澄清设备工艺流程

诸城市鑫淼环保小编带大家了解一下高效微砂沉淀澄清设备工艺流程 微砂循环重介速沉设备 微砂高速絮凝沉淀系统巧妙地将混凝、絮凝、沉淀、分离几个过程优化组合到一个设备中&#xff0c;并引入“微砂”&#xff0c;提升了水中悬浮固体的絮凝效率和分离效率&#xff0c;同时&…

如何帮孩子学好编程

学习编程对于孩子来说是一项非常有益的技能&#xff0c;不仅可以培养孩子的逻辑思维能力&#xff0c;还可以提高孩子的问题解决能力和创造力。以下是一些建议&#xff0c;帮助孩子学好编程&#xff1a; 选择适合孩子的编程语言和工具&#xff1a;根据孩子的年龄和兴趣选择合适的…

一个强大的在线解析网站,无需登录,只用把视频链接粘贴进去就能免费解析下载视频。

TiQu.cc是什么&#xff1f; TiQu.cc是一个强大的在线工具&#xff0c;让用户可以从包括Facebook、VK、Twitter、Tiktok、Instagram等在内的100多个平台下载他们喜爱的视频。不论是音乐、电视节目、电影、短片还是个人上传的内容&#xff0c;TiQu.cc都可以帮助您随时随地以离线…

ChatGPT 4o 使用案例之一

2024年GPT迎来重大更新&#xff0c;OpenAI发布GPT-4o GPT-4o&#xff08;“o”代表“全能”&#xff09; 它可以接受任意组合的文本、音频和图像作为输入&#xff0c;并生成任意组合的文本、音频和图像输出。它可以在 232 毫秒内响应音频输入&#xff0c;平均为 320 毫秒&…