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. 多线程,线程池与BeginInvoke()

    在WinForm中,很多情况下需要用到多线程,下面我来简单介绍一下多线程的基本用法. 1.线程.   (1)线程的初始化  Thread t = new Thread(new ThreadStart( ...

  2. 利用PHP应用程序中的远程文件包含(RFI)并绕过远程URL包含限制

    来源:http://www.mannulinux.org/2019/05/exploiting-rfi-in-php-bypass-remote-url-inclusion-restriction.h ...

  3. gd库的相关内容

    gd库注意事项 对于乱码问题 在php里面包含 header("content-type:image/png"); 这样输出的图像就不会乱码了后面跟的Png也可以改变为自己想要输出 ...

  4. .Net中委托的协变和逆变详解

    关于协变和逆变要从面向对象继承说起.继承关系是指子类和父类之间的关系:子类从父类继承所以子类的实例也就是父类的实例.比如说Animal是父类,Dog是从Animal继承的子类:如果一个对象的类型是Do ...

  5. Spring 使用日期类型

    1. 数据层数据类型依赖包  java.time.LocalDate 2.pom.xml添加依赖 <dependency> <groupId>org.thymeleaf.ext ...

  6. SCART概念

    SCART(Syndicat des Constructeursd' Appareils Radiorécepteurs et Téléviseurs)接口是一种专用的音视频接口,它是由法国公司Per ...

  7. 使用 IDEA 创建 maven 项目

    文章目录 第一步 第二步 第三步 目录结构的设置 看下 web.xml 配置文件 第一步 点击 maven : 勾选从模板创建 : 选择 webapp : 第二步 第三步 如果你自己对 maven 进 ...

  8. pandas之聚合运算

    通过聚合运算可以得到我们比较感兴趣的数据以方便处理 import pandas as pd import numpy as np # 先创建一组数据表DataFrame df = pd.DataFra ...

  9. Scratch-介绍“克隆”

    上次我们模仿一个扔小球的运动, 用到了Scratch的“克隆”. 用Scratch模仿扔小球 “克隆”命令 Scratch“克隆”有三个命令积木. 区分“本体”和“克隆体” 使用“克隆”命令, 我们发 ...

  10. Task执行多次

    项目中,曾经出现过启动时数据库连接数瞬间增大,当时并没有注意该问题. 后期,由于Task任务多次执行,才着手查看这个问题,经排查,由于tomcat中webapp配置多次,导致webapp被扫描多次(配 ...