Python魔法方法(magic method),顾名思义,魔法总是带有一些神奇色彩,就跟魔术似的。它也是有自己的规律,在这里或者说规则更合适一些。

魔法方法有一个非常鲜明的特征,就是总是被双下划线所包围,之所以称之为魔法方法,是由于其不是由程序员去手动的调用,而是在一定场景下自动触发,有python解释器自动调用。

①__new__(cls[, …])方法

  1. new 是在对象实例化时触发,负责为对象分配内存空间

  2. 它的第一个参数是这个类,其他的参数是用来直接传递给 init 方法

  3. new 决定是否要使用该 init 方法,因为 new 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果 new没有返回实例对象,则 init 不会被调用

  4. new 主要是用于继承一个不可变的类型比如一个 tuple 或者 string__init__(self[, …])

    构造器,当一个实例被创建的时候调用的初始化方法

      class Mymethod():
    def __new__(cls, *args, **kwargs):
    return super().__new__(cls)
    # return object.__new__(cls)

②__init__(self,[…])

类的初始化方法。当一个实例被创建的时候调用的初始化方法它获取任何传给构造器的参数(比如我们调用 m = Mymethod(“张三”) , init 就会接到参数

 def __init__(self,name):
self.name = name

③__str__(self)

当打印对象的时候回python解释器回默认调用__str__方法,默认不配置,打印对象的地址,当在类中自定义__str__方法时,打印对象就会打印出指定的内容(类型一定要是字符串str)

 def __str__(self):
return 'name:{}'.format(self.name)

④__repr__(self)

__str__方法的“备胎”,在没有__str__方法的情况下,用__repr__也可实现打印对象输出指定内容,当__str__和__repr__同时存在是,默认__str__方法

也可手动打印指定方法的内容:

m = Mymethod('张三')
print('%s'%m)
print('%r'%m) def __repr__(self):
return 'name:{}'.format(self.name)

⑤__call__(self)

将对象当方法来调用时,默认会报错 对象()或类()()

定义__call__方法可以让一个对象当函数来调用

 def __call__(self, *args, **kwargs):
return self.name

⑥__del__(self)

当一个实例化对象被销毁的时候调用该对象

手动调用del函数时,__del__会被触发

生命周期结束时,对象被系统回收时,__del__会被执行

局部:方法调用结束,触发__del__方法

全局:程序结束,触发 __del__方法

 def __del__(self):
print('{}:回收前再让说一下临终遗言!'.format(self))

⑦__hash__(self)

执行hash()函数时会调用该方法

set集合底层数据结构就是采用哈希表

我们其实可以手动指定底层采用哪些属性来计算哈希值,再此不做详述

⑧__eq__(self)

来用指定用哪些属性做比较,一般都是引用分类的方法

很少需要手动指定

“==”的本质就是调用对象的__eq__方法进行比较

⑨__add__(self)

可以实现对象的相加操作

pythoth 中常用的魔法方法的更多相关文章

  1. jQuery中常用的函数方法

    jQuery中常用的函数方法总结 Ajax处理 load(url,[data],[callback]) url (String) : 待装入 HTML 网页网址. data (Map) : (可选) ...

  2. 2019-2-20C#开发中常用加密解密方法解析

    C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...

  3. VB的一些项目中常用的通用方法-一般用于验证类

    1.VB的一些项目中常用的通用方法: ' 设置校验键盘输入值,数字 Public Function kyd(key As Integer) As Integer Dim mychar mychar = ...

  4. 【Java】Java中常用的String方法

    本文转载于:java中常用的String方法 1 length()字符串的长度 String a = "Hello Word!"; System.out.println(a.len ...

  5. php面向对象类中常用的魔术方法

    php面向对象类中常用的魔术方法   1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct( ...

  6. java在acm中常用基础技巧方法

    java在acm中常用基础技巧方法 如果学到了新的技巧,本博客会更新~ input input-std @Frosero import java.util.*; public class Main { ...

  7. shell中常用的命令方法

    <1>Linux Shell 脚本中字符串的连接方法 [root@localhost company]# var1=/etc/[root@localhost company]# var3= ...

  8. Java中常用的加密方法(JDK)

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...

  9. [转载] Java中常用的加密方法

    转载自http://www.iteye.com/topic/1122076/ 加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的 ...

随机推荐

  1. CSS3 @font-face详细用法

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体就不用再为只能使用Web安全字体烦恼了!肯定 ...

  2. OC入门笔记

    1OC概述OC主要负责UI界面:C语言和C++可以用于图形处理.OC是一门面向对象的语言.C语言是面向过程的.比C++简单很多以C语言为基础,完全兼容C语言.OC语言中的所有事物都是对象,都有isa指 ...

  3. vue项目使用keep-alive的作用

    在vue项目中,难免会有列表页面或者搜索结果列表页面,点击某个结果之后,返回回来时,如果不对结果页面进行缓存,那么返回列表页面的时候会回到初始状态,但是我们想要的结果是返回时这个页面还是之前搜索的结果 ...

  4. laydate时间控件:开始时间,结束时间最大最小值

    时间控件地址及插件下载链接:https://www.layui.com/doc/modules/laydate.html 填充时间已两个功能为例: 1.添加功能 :时间 规则:选择开始时间后,点击结束 ...

  5. java日志框架系列(8):logback框架PatternLayout详解

    当你想要将记录以你想要的的格式写到目的地时,那么你就需要了解如何设置自定义的格式了. 1.PatternLayout 转换模式:由文本文字和格式转换符组成. 下面了解一下格式转换符与格式修饰符表示的意 ...

  6. FZU - 2295 Human life (最大权闭合子图)

    题目链接 FZU - 2295 Human life 题目分析 题意:你在玩一个游戏,在其中你可以通过学习一些技能,但是学习某些技能之前,可能还要学习一些其他的技能,并且学习任何技能都有一定的花费: ...

  7. 使用HSE配置系统时钟并用MCO输出监测系统时钟

    使用模板,在User下新建文件夹RCC 新建bsp_rccclkconfig.h和bsp_rccclkconfig.c 工程和魔术棒添加 对照着上节的RCC源文件编写: void HSE_SetSys ...

  8. 【动态规划】洛谷2019 OI春令营 - 普及组 作业

    [P1464 Function] [题解] 按照题目意思进行递归即可,但是过程中需要用到记忆化搜索. #include<bits/stdc++.h> using namespace std ...

  9. (十三)使用handler实现登录验证

    一.Handel概念 J2EE Web 服务中的Handler技术特点非常像Servlet技术中的Filter.我们知道,在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请 ...

  10. Abp 领域事件简单实践 <三> 自定义事件

    熵片用到的  EntityCreatedEventData<TEntity>,继承自EventData. 我们可以自定义事件: public class TestEvent: EventD ...