前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >魔法方法(第十五章)

魔法方法(第十五章)

作者头像
天钧
发布2019-07-26 17:24:10
2430
发布2019-07-26 17:24:10
举报

构造和析构

魔法方法总是被"__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__()方法
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 渗透云笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档