什么是Python魔法方法

    魔法方法是在Python的类中被双下划线前后包围的方法,如常见的 :initnew、__del__等。这些方法在类或对象进行特定的操作时会自动被调用,我们可以使用或重写这些魔法方法,给自定义的类添加各种特殊的功能来满足自己的需求。

常用的魔法方法

init

    最为常见并熟知的魔法方法就是__init__()方法,可以用此方法来定义一个对象的初始化操作。例如:

class MyClass:def __init__(self, a, b):self.a = aself.b = b
复制代码

new

    init()方法很容易被认为是在实例化对象时调用的第一个方法,其实不是,当我们实例化一个对象的时候,例如class1=MyClass(1, 2),第一个被调用的是__new__()方法,而后再调用__init__()方法,并把一些参数传给__init__()方法,new()方法才是真正地创建了实例化对象,init()方法只是给这个对象进行了初始化操作。

class MyClass:def __init__(self, a, b):print("__init__()方法被调用")self.a = aself.b = bdef __new__(cls, *args, **kwargs):print("__new__()方法被调用")print("args:", args)c = super().__new__(cls)return cclass1 = MyClass(1, 2)
复制代码

执行结果如下:      

    需要注意的是: new()方法第一个参数必须是cls参数,表示当前类,必须返回一个实例化对象,没有什么特别的需求,最好不用重写此方法。

del

    当一个对象的生命周期结束被彻底销毁的时候被调,__del__方法会被调用,不常用,一般不需要进行重写。

str & repr

    str()方法定义当被print()方法或者str()方法调用时的行为,repr()方法定义当被print()方法或者repr()方法调用时的行为,一般来说,它们的功能都是实现类到字符串的转化,实现方式上也没有特别的差异。 但实际上,str()方法的返回结果可读性应该要更强一些,repr()方法的返回结果要更加准确,也就是说,str()方法的意义是得到便于人们阅读的信息,而__repr__()方法的目的在于开发者便于调试。

class MyClass:def __str__(self):return "MyClass类的实例"def __repr__(self):return self.__class__.__name__class1 = MyClass()
print(str(class1))
print(repr(class1))
print(class1)
复制代码

    注意:当进行print()的时候,首先被执行的是__str__()方法,如果没定义__str__()方法,repr()方法才会被执行。

call

call()方法可以让类的实例像函数一样被调用。例如:

class Multiply:def __init__(self, x, y):self.x = xself.y = ydef __call__(self, *args, **kwargs):return self.x * self.yp = Multiply(2, 3)
print(p())
复制代码

    当调用p()时,call()方法会被调用,返回参数x和y的乘积,call()方法也可以接受参数。

iter

    如果我们希望一个实例化对象是一个迭代器,可被用于for…in循环遍历,这时我们需要在类中定义__iter__()方法和__next__()方法,iter()方法返回一个迭代对象,next()返回迭代器的下一个元素,这个在之前的文章有说过:迭代器Iterator的实现,这里就不展开了。

总结

    其实魔法方法远远不止这些,还有很多很多也值得我们去使用,Python中的魔法方法就跟它的名字一样有魔法,总是可以便捷的给你提供你所需要的各种需求,它们是Python面向对象编程的一大利器,使用好了会有意想不到的结果,慢慢去了解并使用它们吧。

    如果对软件测试、接口测试、自动化测试、持续集成、面试经验。感兴趣可以进到806549072,群内会有不定期的分享测试资料。还会有技术大牛,业内同行一起交流技术

Python 中常见的魔法方法相关推荐

  1. python中常见的魔法方法 magic method

    魔法方法 magic method(类中定义的双下方法) 魔法方法都是父类object有的,在python3中所有的类默认都会继承object.当我们对这个对象使用这些函数或者运算符时就会调用类中的对 ...

  2. Python的面向对象(二):Python中神奇的魔法方法

    魔法方法 Python里面有一种特殊的方法,叫做魔法方法.Python的类里提供的,是由两个下划线开始,再以两个下划线结束的方法. 魔法方法不需要手动调用,会在恰当的时候就会被激活,自动执行. 魔法方 ...

  3. python 中常见的面试练习题

    python 中常见的面试题 语言特性 编码规范 数据类型-字符串 数据类型 - 列表 数据类型 - 字典 数据类型 - 综合 操作类题目 高级特性 正则表达式 其他内容 算法和数据结构 爬虫类 网络 ...

  4. Python 中常见的配置文件写法

    相信学习Python或者正在进行Python工作的小伙伴都会有一个疑问,为什么要写配置文件呢?在开发过程中,我们常常会用到一些固定参数或者是常量.对于这些较为固定且常用到的部分,往往会将其写到一个固定 ...

  5. Python中有用的字符串方法

    字符串是字符序列.Python中内置的string类代表基于Unicode国际字符集的字符串.除了Python中常见的操作外,字符串还有一些专属于它们的附加方法.下图显示了所有这些可用的方法: 在本文 ...

  6. Python中常见的配置文件写法分享!

    相信学习Python或者正在进行Python工作的小伙伴都会有一个疑问,为什么要写配置文件呢?在开发过程中,我们常常会用到一些固定参数或者是常量.对于这些较为固定且常用到的部分,往往会将其写到一个固定 ...

  7. Python学习笔记Task11.魔法方法

    Python学习笔记Task11.魔法方法 魔法方法格式__init__ 1.基本 init(self[,-]) new(cls[,-]) del(self) str(self) repr(self) ...

  8. Python 中常见的 TypeError 是什么?

    翻译:BioIT 爱好者 原文:TypeError: A Bytes-Like object Is Required, not 'str' | Finxter 简介 目标:在本教程中,我们的目标是修复 ...

  9. python中类方法与实例方法的区别-Python中的对象,方法,类,实例,函数用法分析...

    本文实例分析了Python中的对象,方法,类,实例,函数用法.分享给大家供大家参考.具体分析如下: Python是一个完全面向对象的语言.不仅实例是对象,类,函数,方法也都是对象. class Foo ...

最新文章

  1. 移动master 数据库
  2. C语言二级指针与典型应用(1)
  3. Android O: View的绘制流程(二):测量
  4. python如何读取数据保存为新格式_python,初学者应用实例:读取文件中的数据,将将北京时间转换成世界时间,再保存成新的CSV格式文件...
  5. 5939. 半径为 k 的子数组平均值
  6. squid代理服务器在企业网中的应用
  7. SQL 数据库的自动备份(Procedures实现)
  8. 别太单纯,也别太不单纯
  9. sed命令在文件头部插入文本---BSD和GNU版本通用写法
  10. 在线运行java代码并得到结果_Java代码是如何运行的?
  11. PowerDesigner(CDM—PDM—SQL脚本的转换流程) 随笔
  12. 解决dropbear在busybox中使用无法使用本地用户登录问题
  13. 竣达技术丨24路电压电流采集模块
  14. 酉矩阵/幺正矩阵(Unitary Matrix)
  15. 服务器磁盘阵列数据恢复方法,两块硬盘离线恢复数据
  16. 使用outlook及office assitans实现邮件批量发送
  17. android 摇一摇脚本,python for android : 手机摇一摇
  18. YIT-CTF—隐写术
  19. 点击a标签调起whatsapp
  20. 2009 雷人记录汇总[转]

热门文章

  1. php创建一个文本计数器,一个用php3编写的简单计数器
  2. Error:FAILURE: Build failed with an exception. * What went wrong: Task '' not found in root projec
  3. 羽素携专家登《岭南大医生》,共揭痘肌修护玄机
  4. Q妹带你赚外快:一大波Python悬赏问答来袭,你敢接招吗?
  5. 简述div标签和span标签的不同_SPAN标签和DIV标签的区别
  6. 时间序列预测任务PyTorch数据集类——TimeSeriesDataSet 类详解
  7. Matrix67的LCD电子公告牌、GB2312-80编码、HZK16字模及其他
  8. 5年测试开发,年后被蚂蚁金服以“人员优化”被无情裁员,想给在职的测试人提个醒···
  9. 如何向linux云主机上传文件,云主机上传文件具体步骤
  10. Aspose.PSD使用教程:使用 Java 裁剪或旋转 PSD 图像