python进阶1:魔术方法
1、定义
在类里面,使用__xx__()形式的方法。这一类方法可以在类被构建的时候隐式调用,从而实现多种功能。也可以通过重载这些魔术方法,来实现自定义的功能。
2、常用的魔术方法
2.1 __new__方法
分配内存对象并返回,返回的实际上是self的内存地址,如果定义了__new__但是不返回,那么其下的__init__将不会执行;但如果不定义__new__,会自动分配内存地址。
class Pig:def __new__(cls, *arg, **kwargs):print('distribute memory space')obj = object.__new__(cls)print(obj)# return objdef __init__(self):print('Born a pig!')
p=Pig()
class Pig:def __new__(cls, *arg, **kwargs):print('distribute memory space')obj = object.__new__(cls)print(obj)return objdef __init__(self):print('Born a pig!')p=Pig()
2.2 __init__方法
初始化魔术方法
2.3 _del__方法
从内存中清除对象,对象会默认执行方法。具体执行的时间节点
程序执行完毕,释放内存
执行del指令时
class Pig1:def __init__(self,value):print("对象被初始化了:{}".format(value))def __del__(self):print("对象被删除了") p=Pig1("test")
print('program finished!')
2.4 __call__方法
当对象以函数方式调用时,会自动调用__call__
class Flight:def __init__(self,number):self.number=numberprint(f"{number}号航班")#办理登机手续def checkIn(self):print("办理登机手续")#安全检查def securityCheck(self):print("安全检查")#登记,起飞def boarding(self):print("起飞,登机")def __call__(self,*args,**kwargs):self.checkIn()self.securityCheck()self.boarding()print("__call__被调用了")
#实例化一个对象f
f=Flight("CA1426")
#以函数的方式调用f
f()
#以函数的方式调用对象会自动调用__call__
#以下输出的结果
如果注视掉f()
# f()
那么就不会调用__call__,只会调用__init__,输出为:
2.5 __str__方法
在打印类对象时调用。使用str强制转换数据类型,在输出结果时调用。
class Dog:def __init__(self,name):self.name=namedef __str__(self):return f"这是一条叫{self.name}的狗"d=Dog("阿毛")
print(d)
#自动调用__self__
注意:
- 必须print(d),__str__才会被自动调用
- __str__里必须返回一个string对象,如果将其定义中的return换成print,那么程序会报错
2.6__repr__方法
与__str__一样,也是输出对象的字符串格式,最大的不同在于,__repr__在可变容器(list,dict)中会被默认调用,否则,如果一个类中同时定义了__str__方法和__repr__方法,那么只会调用__str__方法 ,而不会调用__repr__方法
class Dog:def __init__(self,name):self.name=namedef __str__(self):return f"这是一条叫{self.name}的狗"def __repr__(self):print("调用repr魔术方法")return f"dog:{self.name}"
d=Dog("阿毛")
print(d)
class Dog:def __init__(self,name):self.name=namedef __str__(self):return f"这是一条叫{self.name}的狗"def __repr__(self):print("调用repr魔术方法")return f"dog:{self.name}"
d=Dog("阿毛")
print(d)
x=[d]
print(x)
str和repr都调用了
2.6 getitem(self, key)获取dict中某个key的值
初始化类对象后自动调用
2.7 setitem(self, key, value)设置dict数据
初始化类对象后自动调用
python进阶1:魔术方法相关推荐
- python描述符魔术方法_Python类型转换的魔术方法详解
本文讨论python中将某个复杂对象转换为简单对象或数据类型的常用魔术放啊,这些在编程中是十分有用的. 1.__str__方法. 在讲解本方法前我们先打开一个jupyter notebook,随意创建 ...
- python 中的魔术方法 getitem setitem
python 中的魔术方法 getitem setitem https://docs.python.org/3/reference/datamodel.html?highlight=iter#obje ...
- python 类的魔术方法_python中类的魔术方法
目的:学习python中class的magic methods,提高编程效率. 环境:ubuntu 16.4 python 3.5.2 在学习class时一定会接触到它的magic methods ...
- python 析构函数_常用的python类的魔术方法
对于很少使用python编写大型代码的朋友可能会忘记python还是一种面向对象的语言.在其他面向对象的语言中有构造函数.析构函数等等在生命周期不同时机自动调用的函数,python当然也是有的.除此之 ...
- python中的魔术方法
魔术方法 魔术方法就是一个类/对象中的方法,和普通方法唯一的不同时,普通方法需要调用!而魔术方法是在特定时刻自动触发. 1.__init__ 初始化魔术方法 触发时机:初始化对象时触发(不是实例化触发 ...
- Python中的魔术方法详解
介绍 在Python中,所有以"__"双下划线包起来的方法,都统称为"Magic Method",中文称『魔术方法』,例如类的初始化方法 __init__ ,P ...
- python描述符魔术方法_学习笔记-Python基础9-面向对象编程OOP-类的成员描述符(property)、类的常用内置属性、类的常用魔术方法、类和对象的三种方法...
一.类的成员描述符(property) 类的成员描述符是为了在类中,对类的成员属性进行相关操作而创建的一种方式,大部分属于数据清洗 属性有三种操作:get获取属性值.set修改或添加属性.delete ...
- Python笔记_20_魔术方法
文章目录 魔术方法(特定时机自动触发) `__init__` (构造方法) `__new__`魔术方法 `__del__ `(析构方法) `__call__ ` 魔术方法 `__str__` 魔术方法 ...
- Python 中的魔术方法(双下划线开头和结尾的方法)
https://gitbook.cn/books/5ffd564919f81e0b10c9e39f/index.html https://www.cnblogs.com/pyxiaomangshe/p ...
- 详细介绍Python中的“魔术方法“__XXX___; 概述__str__()方法;__new__()方法; 三. __ new__ 和__init__的区别
概述 一.__str__方法 当不用__str__()时: 发现输出结果只有对象一串id地址信息; 当我们想打印出更多信息时,用__str__()方法; 二.new()方法 三. __ new__ 和 ...
最新文章
- 伍六七带你学算法 进阶篇-三数之和
- NSURLSession简介与入门
- 概念炒作的背后,“智能合约”的真相是什么?
- 分布式框架-日志系统思路及实现
- Documentum中关于日期时间类型字段的特殊处理
- 三个案例,解读静态代码块和构造代码块
- 23种设计模式中的解释器模式
- 23种设计模式----------代理模式(一)
- AtCoder Regular Contest 120 C - Swaps 2 线段树模拟
- freebsd运行php,FreeBSD学习笔记16-FreeBSD下安装PHP
- 计算机专业基础 -- Linux系统相关基础知识
- 无需依赖Adobe Acrobat,在Java中进行PDF格式转换全新攻略
- HTML小游戏7 —— 《罗斯魔影》魔法消除游戏(附完整源码)
- 计算机主板过热报警,利用电脑主板BIOS的报警声音辨别电脑故障
- SpringBoot整合Cache缓存技术(二十一)
- 入侵手游服务器修改数据库,如何入侵手游服务器数据库
- content-box和boder-box的区别
- Dell服务器电源配置规则
- CCIE理论-第十二篇-IPV6-NDP协议
- java 1603,win10系统安装软件提示功能传送错误1603的处理方法
热门文章
- r语言kendall协和系数_列联表篇之十一:有序数据的Kendall协和系数
- 手写文字怎么识别转换?有哪些练字的方法?
- C#读取计算机的机器码、网卡、设备码
- [生存志] 第125节 针道针具取穴
- java结果写入html,java - 将长字符串写入HTML文件,InputStream vs FileWriter vs BufferedReader - 堆栈内存溢出...
- VMware-server-2.0.0-101586注册码备下来
- Node.js创造者Ryan Dahl专访
- 做棋牌,该怎么设计你的代码
- 模拟软件-OLED及太阳能电池的模拟软件(漂流扩散模块)-[Setfos]
- 智慧养老之基于RFID技术下的智慧养老解决方案-养老院智能看护系统-新导智能