洗礼灵魂,修炼python(37)--面向对象编程(7)—了解魔法方法
2018-03-07 21:17
543 查看
也许上一篇博文提到的property内置函数的用法你还觉得记忆犹新,那么有没有更多的类似的方法呢?有的,就是本篇文章要说的魔法方法
怎么报错了?之前是不是自以为很了解__init__了,但是它居然有不为人知的一面对吧?居然报错了,啥原因呢?我们先看一个正常的例子:
这个是我们熟悉的用法对吧?没有像刚才那样报错,也没有返回什么东西。到底为啥,在上面的报错信息里已经给出答案了:
意思是__init__()调用时,应该返回一个空值,而不是一个字符串类型。换句话就是__init__返回必须是None,不能是其他任何对象。 再上面那个正常的例子,因为b=B()这个步骤表示,B类对象实例化给b对象时,由于会自动调用__init__,看例子里没有任何返回,也就是None的。所以现在应该看懂了吧
__new__至少要有一个参数cls,即要实例化的类,此参数在实例化时由Python解释器自动提供
__new__必须得返回实例化出来的实例
例:
注意标记出来的返回的写法
注意:del 不等于 __del__
只有当所有变量对__init__(self)的引用都被del之后才会启动垃圾回收机制,垃圾回收机制销毁对象时,才会自动调用__del__(self)
上面的几个魔法方法都说得很浅显,例子也很简单,所以看不出具体的用法,相信你看完也不是很懂,放心,后面的章节都会围绕魔法方法来讲,后面还会用到这几个魔法方法的。而本篇博文只是作为对魔法方法的了解,后面才是真正的进入魔法方法。
魔法方法
1.什么是魔法方法
(其实前面已经提到多次,每次我都是说暂且不谈,后面会提到,在这里终于填坑了)总是被双下划线包围的方法,比如__init__魔法方法是面向对象的python的一切。有句话叫“如果你不清楚魔法方法,那么你还没能意识到面向对象的python的强大”所以在python中,魔法方法是很重要的2.为什么叫魔法方法:
在于魔法方法的“魔力”,体现在他们总能够在适当的时候自动调用3.哪些是魔法方法
有很多,最基本的就是__init__,__new__,__del__,这些。并且魔法方法可以自定义(关于如何如何自定义魔法方法后面的章节里有,这里暂且不谈) 上面三个魔法方法就是今天的主角:__init__(self[,……])
这个魔法方法应该不陌生,前面几个章节一直在用的。但是有个问题,注意看下面的例子:怎么报错了?之前是不是自以为很了解__init__了,但是它居然有不为人知的一面对吧?居然报错了,啥原因呢?我们先看一个正常的例子:
这个是我们熟悉的用法对吧?没有像刚才那样报错,也没有返回什么东西。到底为啥,在上面的报错信息里已经给出答案了:
意思是__init__()调用时,应该返回一个空值,而不是一个字符串类型。换句话就是__init__返回必须是None,不能是其他任何对象。 再上面那个正常的例子,因为b=B()这个步骤表示,B类对象实例化给b对象时,由于会自动调用__init__,看例子里没有任何返回,也就是None的。所以现在应该看懂了吧
__new__(cls[,……])
__new__继承自object类__new__至少要有一个参数cls,即要实例化的类,此参数在实例化时由Python解释器自动提供
__new__必须得返回实例化出来的实例
例:
注意标记出来的返回的写法
__del__(self)
__del__是python中的垃圾回收机制的体现 直接上例子:注意:del 不等于 __del__
只有当所有变量对__init__(self)的引用都被del之后才会启动垃圾回收机制,垃圾回收机制销毁对象时,才会自动调用__del__(self)
上面的几个魔法方法都说得很浅显,例子也很简单,所以看不出具体的用法,相信你看完也不是很懂,放心,后面的章节都会围绕魔法方法来讲,后面还会用到这几个魔法方法的。而本篇博文只是作为对魔法方法的了解,后面才是真正的进入魔法方法。
相关文章推荐
- 洗礼灵魂,修炼python(39)--面向对象编程(9)—魔法方法表
- 洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块
- 洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性
- 洗礼灵魂,修炼python(31)--面向对象编程(1)—面向对象,对象,类的了解
- 洗礼灵魂,修炼python(32)--面向对象编程(2)—进一步认识类
- 洗礼灵魂,修炼python(34)--面向对象编程(4)—继承
- 洗礼灵魂,修炼python(35)--面向对象编程(5)—多重继承,组合
- 洗礼灵魂,修炼python(36)--面向对象编程(6)—类的相关内置函数issubclass,hasattr等
- 洗礼灵魂,修炼python(27)--异常处理(1)—>了解异常
- 洗礼灵魂,修炼python(34)--面向对象编程(4)—继承
- 洗礼灵魂,修炼python(5)--python操作符,内置函数
- 洗礼灵魂,修炼python(10)--有趣的判断分支+从实例中掌握循环语句
- 洗礼灵魂,修炼python(6)--活起来的代码+列表
- 洗礼灵魂,修炼python(11)--python函数,模块
- 洗礼灵魂,修炼python(12)--python关键词,包
- 洗礼灵魂,修炼python(7)--元组,集合,不可变集合
- 洗礼灵魂,修炼python(13)--模块random,math,pickle
- 洗礼灵魂,修炼python(14)--模块decimal, fractions,operator,collections以及精度介绍
- 洗礼灵魂,修炼python(26)--编程核心之“递归”
- 洗礼灵魂,修炼python(1)--python简介