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  消灭猕猴桃  阅读(485)  评论(0编辑  收藏  举报