魔法方法(第十五章)

释放双眼,带上耳机,听听看~!

构造和析构

魔法方法总是被”__init__”两个下划线所包围

魔法方法是面对对象Python的一切

魔法方法的魔力总是能够在适当的时候被调用

例子

class Rectangle: '''定义一个矩形类,需要长宽两个参数,拥有计算周长和面积 的两个方法,需要对象在初始化的时候,拥有长和宽两个参数 因此需要重写__init__方法''' def __init__(self,x,y): self.x = x self.y = y def Zc(self): return self.x + self.y def Cc(self): return self.x * self.y

    运行后

>>> dd = Rectangle(2,4)>>> dd.Zc()6>>> dd.Cc()8

很容易理解吧。

注意的是,__init__()方法的返回值一定是None,不能是其他,例子

>>> class A:... def ___init__(self):... return "A for A-Cup"...>>> cup = A()Traceback (most recent call last): File "<pyshell#26>", line 1, in <module> cup = A()TypeError: __init__() should return None, not 'str'

这里有个误差,有的同学,是没有报错的。

可能是版本不同,而且上面的程序也没达到咱们要的效果

>>> cup = A()>>>A for A-Cup

这是咱们想得到的,根据魔法方法__init__的要求,返回值一定要是None大家记住就好。

在魔法方法中,也是讲究谁是老大的,也就是,谁是第一个被调用的,这里有的同学会说那肯定是(__init__())其实并不是,新知识点

__new__(cls[,….])才是一个对象实例化的时候所调用的第一个方法

  1. __new__()方法需要返回一个实例对象,通常是cls这个类实例化的对象,当然你也可以返回其他对象。

  2. __new__()与其他的魔法方法不同,他的第一个参数不是self而是一个类cls,而其他参数直接传递给__init__()方法。

  3. __new__()方法平时很少去重写它,一般让python用默认的方案执行就可以了。但是有一种情况需要重写这个魔法方法,就是当继承一个不可变类型的时候,它的特性就尤为重要了。

看例子

class Capstr(str): def __new__(cls,string): string = string.upper() return str.__new__(cls,string)

运行后

>>> a = Capstr("tianjun")>>> a'TIANJUN'>>> 

如果说__init__()和__new__()方法是对象的构造器的话,那么python也析构了一个构造器,__del__()方法,当对象被销毁时,这个方法就一定会被调用,但要注意的是,并非del x就等同于自动调用了x.__del__(),__del__()方法是当垃圾回收机制回收这个对象的时候调用的

看例子

>>> class C(): def __init__(self): print('我是__init__()方法') def __del__(self): \ print('我是__del__()方法')
>>> c1 = C()我是__init__()方法>>> c2 = c1>>> c3 = c2>>> del c1>>> del c2>>> del c3我是__del__()方法

后台回复有点过分了你们

回复框框里的数字

即可,别回001啊,有点慌,昨天忘了,今天早起来发的

明年我整理一下我的百度云资源库,共享给大家 

到底是谁走漏了我有3个T的资源的

本文源自微信公众号:渗透云笔记

人已赞赏
安全工具

一百美金骗局

2019-10-16 17:15:57

安全工具

pwnable-Col

2019-10-16 17:16:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索