一、魔法方法
1.概述
(1)在python中方法名如果是 __xxx__() 的,那么就有特殊的功能,因此叫做“魔法”方法
(2)其实每个魔法方法都是在对内建方法(str、del等))的重写
2.__init__方法
也叫初始化函数:def __init__(self,参数1,参数2,参数3)
(1)构造函数在类实例化之后自动执行
(2)构造函数传参在实例化的时候传参
(3)构造函数没有返回值
① 代码
# coding:utf-8 # 构造函数创建对象时就执行 class People(): def __init__(self): print("这是一个构造函数...") p = People() print("--------------------------------------------") # 构造函数传参 class People1(): def __init__(self,name): print("我的名字是:{}".format(name)) p1 = People1("suner")
② 结果
3.__del__方法
(1)只有实例被删除之后,析构函数才会执行
(2)垃圾回收机制
(3)当有一个变量保存了对象的引用时,此对象的引用计数就会加1
(4)当使用del删除变量指向的对象时,如果对象的引用计数不为1,比如3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,再调用1次del,此时会将对象进行删除
① 代码
# coding:utf-8 class Animal(): def __del__(self): print("__del__函数被调用") a = Animal() del a print("a执行结束...") print("--------分割线----------") b = Animal() print("b执行结束...") del b
② 结果
4.__new__方法
(1)__new__至少要有一个参数cls,代表要实例化的类(并不是对象)
(2)__new__必须要有返回值,返回实例化出来的实例
(3)简单来说__new__方法,就是创建一个实例。
① 代码
# coding:utf-8 class A(): def __init__(self): print("这是init方法") def __new__(cls, *args, **kwargs): print("这是new方法") return object.__new__(cls) a = A()
② 结果
5.__str__方法
当使用print输出对象的时候,只要自己定义了__str__(self) 方法,那么就会打印从这个方法中return的数据
① 代码
# coding:utf-8 class A(): def __init__(self,name): self.name = name def __str__(self): return "name is %s"%self.name a = A("suner") print(a) # 打印a对象,会默认调用__str__方法
② 结果