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. Mac更新npm和node版本

    npm: 查看当前版本: npm --version 更新到最新版: sodu npm install npm@latest -g node: 1.查看当前版本: node -v 2.清除npm当前缓 ...

  2. iOS- Core Foundation对象与OC对象相对转换

    对ARC盲目依赖的同学: 1过度使用block后,无法解决循环引用问题 2遇到底层Core Foundation对象,需要自己手工管理它们的引用计数时,显得一筹莫展 first:对于底层Core Fo ...

  3. 超详细的RNN代码实现(tensorflow)

    一.学习单步的RNN:RNNCell 如果要学习TensorFlow中的RNN,第一站应该就是去了解“RNNCell”,它是TensorFlow中实现RNN的基本单元,每个RNNCell都有一个cal ...

  4. 【VS开发】TCP服务端如何判断客户端断开连接

    原文出自:http://www.cnblogs.com/youxin/p/4056041.html 一篇文章:   最近在做一个服务器端程序,C/S结构.功能方面比较简单就是client端与serve ...

  5. [官网]Postgresql 的客户端应用 pg_config

    pg_config Name pg_config -- 检索已安装版本的 PostgreSQL 的信息 Synopsis pg_config {--bindir | --includedir | -- ...

  6. Appium 基于控件左滑操作

    def swipe_ele_left(self, ele, dur=800): """ 基于控件元素左滑操作 :param ele: 控件元素 :param dur: 在 ...

  7. oracle经典查询语句

    1. select * from emp;   2. select empno, ename, job from emp;   3. select empno 编号, ename 姓名, job 工作 ...

  8. Python笔记day20-面向对象

    目录 面向对象 1 装饰器 1.1 装饰器是什么? 1.2 装饰器 2 面向对象 (Object Oriented) 简称OO 2.1 面向对象相关术语 2.2 类和对象 2.3 类和对象的实现和书写 ...

  9. 希尔排序——C语言

    希尔排序 希尔排序是插入排序的一种,又称“缩小增量排序”,希尔排序是直接插入排序算法的一种更高效的改进版本,关于插入排序可以看下这篇随笔:插入排序——C语言 (图片来源:https://www.cnb ...

  10. 『Linux』第二节: 安装Linux系统

    一. 准备工具 1. centOS系统下载 http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.is ...