Python3 魔法方法:构造和析构

1、魔法方法的特点:

魔法方法总是被双下划线包围例如:__init__

2、__new__(cls,[....])

__new__是在对象实例化后所调用的第一个方法,与其他方法不同他的第一个参数不时self而是cls因为,而其他参数会直接传递给__init__方法.

注意:__new__方法的主要任务是返回一个实例对象,通常是cls这个类实例化的对象,当然你也可以返回其他对象

     开方法主要在改写一些内置函数的时候使用

复制代码
#定义一个Nint类型,传入参数为字符串的时候返回该字符串所有字符的ASCII码之和
class Nint(int):
        def __new__(cls, arg=0):
                if isinstance(arg, str):
                        total = 0
                        for each in arg:
                                total += ord(each)
                        arg = total
                return int.__new__(cls, arg)
复制代码

 

3、__init__(self,[....])(构建函数)

__init__方法在类被实例化之后会被自动调用,可以重写这个方法为对象指定初始化方案

__init__方法无返回,即返回值必须为None

下面是一种错误的做法

class Test:
        def __init__(self, x, y):
                return x + y

4、__del__(self)(析构函数)

在对象被销毁(注:垃圾回时机制回收这个对象时才会被调用)时会自动调用这个函数

复制代码
class A:
    def __del__(self):
        print('正在调用__del__函数')


>>> a=A()
>>> b=a
>>> c=a
>>> del c
>>> delb
>>> del b
>>> del a#到这里才删除了对象a
正在调用__del__函数
复制代码

 

posted @ 2018-02-07 18:19  消灭猕猴桃  阅读(496)  评论(0)    收藏  举报
编辑推荐:
· 复杂业务系统线上问题排查过程
· 通过抓包,深入揭秘MCP协议底层通信
· 记一次.NET MAUI项目中绑定Android库实现硬件控制的开发经历
· 糊涂啊!这个需求居然没想到用时间轮来解决
· 浅谈为什么我讨厌分布式事务
阅读排行:
· 那些年我们一起追过的Java技术,现在真的别再追了!
· 还在手写JSON调教大模型?.NET 9有新玩法
· 为大模型 MCP Code Interpreter 而生:C# Runner 开源发布
· 面试时该如何做好自我介绍呢?附带介绍样板示例!!!
· JavaScript 编年史:探索前端界巨变的幕后推手
点击右上角即可分享
微信分享提示