特殊方法

1.__init__魔术方法

初始化魔术方法

2.__new__魔术方法

对象初始化:

​ 先执行 _ new _ :分配内存空间,并返回构建好的对象(的地址)

​ 再执行 _ init _:为构建好的对象赋予初始化

class Pig:#object是定义python所有库函数和底层逻辑的类def __new__(cls,*arg,**kwargs):return object.__new__(cls)def __init__(self):print("一只猪诞生了")#__new__返回的空间就是类里面self的空间
p=Pig()
#p=Pig("佩奇",brother="乔治")

验证__new__魔术方法返回的是self的内存地址

class Pig:def __new__(cls):print("分配内存空间.....")obj=object.__new__(cls)print(obj)return obj   #return None如果返回None,那么就不会执行__init__def __init__(self):print(self)print("一只猪诞生了")
p=Pig()

3.__del__魔术方法

从内存中清除对象,对象会默认执行方法。具体执行的时间节点

  • 程序执行完毕,释放内存
  • 执行del指令时
class Pig(object):def __init__(self):print("对象被初始化了")def __del___(self):print("对象被删除了")    p=Pig()

输出:

对象被初始化了

对象被删除了

说明:在实例被创建的时候就自动执行了

class Pig(object):def __init__(self):print("对象被初始化了")def __del___(self):print("对象被删除了")    p=Pig()
print("程序执行完成了")

del在整个程序被执行完才会被调用

也可以手动的调用

class Pig(object):def __init__(self):print("对象被初始化了")def __del___(self):print("对象被删除了")    p=Pig()
del p
print("程序执行完成了")

4.__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__
#以下输出的结果

5.__str__魔术方法

打印一个对象的时候,默认调用

在使用str()对对象强制类型转换后,输出结果时会调用

class Dog:def __init__(self,name):self.name=namedef __str__(self):return f"这是一条叫{self.name}的狗"d=Dog("阿毛")
print(d)
#自动调用__self__

#看看直接打印会输出什么结果
class Dog:def __init__(self,name):self.name=name
d=Dog("阿毛")
print(d)
#输出的是d的地址

注意:返回的一定是一个字符串

class Dog:def __init__(self,name):self.name=namedef __str__(self):return 123d=Dog("阿毛")
print(d)

通过调用父类对象__str__方法,打印原有的结果

class Dog:def __init__(self,name):self.name=namedef __str__(self):print(super().__str__())return f"这是一条叫{self.name}的狗"d=Dog("阿毛")
print(d)

6.__repr魔术方法(对象是可变容器)

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)

直接执行的是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)
x=[d]
print(x)

python——魔术方法相关推荐

  1. python 魔术方法

    python 魔术方法 常用魔术方法 魔术方法就是一个类的特殊方法,和普通方法唯一的不同时,普通方法需要调用!而魔术方法由系统自动调用. 1.__init__ 初始化魔术方法 触发时机:初始化对象时触 ...

  2. 【Python魔术方法】py复习

    Python魔术方法 __init__ 类似于构造器 #__init__ magic class Human:def __init__(self, name):#print('init exec')s ...

  3. Python 魔术方法指南

    http://pycoders-weekly-chinese.readthedocs.org/en/latest/issue6/a-guide-to-pythons-magic-methods.htm ...

  4. python魔术方法由谁定义_Python的魔术方法

    魔术方法就是在定义的类中定义一些"不一般"的方法,使类的使用更方便.完善.健壮,是python特有的方法,一般都是前后包含两个下划线__的方法称为魔术方法,例如__new__. 基 ...

  5. [转载] 【python魔术方法】迭代器(__iter__和__next__)

    参考链接: Python __iter __()和__next __()| 将对象转换为迭代器 文章目录 `__iter__` 和 `__next__`真正的迭代器总结 python里面有很多的以__ ...

  6. python魔术方法abstract_python学习之面向对象高级特性和魔术方法

    01_property商品应用.py 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一. 类属性应用需求: 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数 ...

  7. python魔术方法(一)

    所谓的魔术方法就是让用户客制化类的方法,常常是python中开头有两个下划线的方法. __new__() new是创建一个类的过程 class A:def __new__(cls,x):print(& ...

  8. python魔术方法是什么_Python常用魔术方法

    什么是魔术方法? 在Python中,所有以双下划线__包起来的方法,统称为Magic Method(魔术方法),它是一种的特殊方法,普通方法需要调用,而魔术方法不需要调用就可以自动执行. 魔术方法在类 ...

  9. python魔术方法(进阶)斐波那契数列

    文章目录 特殊属性 查看属性 实例化 可视化 hash bool 运算符重载应用场景 容器相关方法 可调用对象 上下文管理 上下文管理的安全性 方法的参数 contextlib.contextmana ...

最新文章

  1. 日媒:中国去年装机量猛增 成最大光伏日媒:中国去年装机量猛增 成最大光伏发电国家发电国家...
  2. 用北斗和阿里云毫米级监控山体滑坡 他还只是铁路工人
  3. 《啊哈!算法》笔记_Day02
  4. Dubbo 只注册,只订阅
  5. Spring MVC 异步处理请求,提高程序性能
  6. Linux运维必备的40个命令总结(值得收藏)
  7. .NET版Web后台快速开发框架 Coldairarrow
  8. java 外螺旋矩阵_螺旋矩阵的java实现
  9. 爬虫、请求库requests
  10. Linux学习(2)常用的命令
  11. 1079 Total Sales of Supply Chain (25 分) 树的遍历:DFS+vector
  12. 10分钟教你生成超高逼格微信朋友圈
  13. MySQL数据库——复杂查询(二)
  14. 可用的公开 RTSP/ RTMP 在线视频流资源地址(亲测可行)
  15. 哈利波特魔法觉醒火盾护身卡组推荐 火盾护身如何搭配
  16. 如何确定自己不是高智商?蒙提霍尔三扇门问题
  17. USB无法debug调试:because an app is obscuring a permission request settings cab't verify your resonse
  18. MicroC实现Expr部分和for循环,无续算版本Comp.fs展示
  19. 基于Tomcat7的WebSocket.兼容IE(客户端需Flash10)
  20. vector容器删除元素的几种简单方法(详细实用)

热门文章

  1. CSDN | 图片居中 | 图片改大小
  2. phpcms 更换新域名更新栏目url和内容页url无法更新解决方法
  3. MySQL数据库基本语法
  4. 电梯轴承市场现状及未来发展趋势分析
  5. 用JS实现歌词与播放音乐同步
  6. [plutus666原创]星图模拟软件-星图相机
  7. 串口通信发送hello windows
  8. dxSDK jun10与dx8的兼容问题
  9. 浅谈对前端开发的简单认识
  10. 学习笔记C语言 switch语句