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. Java中将一个反斜杠转换成两个反斜杠

    代码示例: s = s.replaceAll("\\\\", "\\\\\\\\");

  2. Spring Boot中一个Servlet主动断开连接的方法

    主动断开连接,从而返回结果给客户端,并且能够继续执行剩余代码. 对于一个HttpServletResponse类型的对象response来说,执行如下代码: response.getWriter(). ...

  3. Convex Hull | Set 1

    Given a set of points in the plane. the convex hull of the set is the smallest convex polygon that c ...

  4. CentOS 7中安装和配置Promethues

    Prometheus 是什么? Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的.随着发展,越来越多公司和组织接受采用Prome ...

  5. 心の壁 From EOE:Air / 真心为你

    https://www.bilibili.com/bangumi/media/md10272/ 真嗣:我问你. 凌波:什么? 真嗣:梦到底是什么呢? 凌波:梦? 真嗣:我不太明白什么是现实. 凌波:你 ...

  6. web 中常用的两种上传文件的方法总结

    这里我们来总结整理一下常用的两种文件上传方式以及要注意的东西: 1.springmvc .MultipartFile 的上传方式. 2.org.apache.commons.fileupload 使用 ...

  7. [转帖]Linux 中的零拷贝技术,第 1 部分

    Linux 中的零拷贝技术,第 1 部分 https://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy1/index.html   引言 传统的 ...

  8. VC++操作注册表(创建,读取,更改,删除)

    #include "stdafx.h" #include <Windows.h> #include <iostream> using namespace s ...

  9. [MA] 有关 Likelihood

    当提到 Linear Regression 或是 Logistic regression 等关键词时,都会涉及一个概念,叫做 Likelihood Function 以及 Maximum Likeli ...

  10. spring cloud中代理服务器zuul的使用

    spring cloud中代理服务器zuul的使用 主流网关:     zuul     kong 基于nginx的API Gateway     nginx+lua 1.新建项目,选择eureka ...