魔术方法
魔术方法: __ xxx __
'''
__init__ 方法:初始化一个类,在创建实例对象为其赋值时使用
__str__方法 : 在将对象转换成字符串str(对象)测试的时候,打印对象的信息
__new__方法 : 创建并返回一个实例对象,调用了一次,就会得到一个对象
__class__方法 : 获得已知对象的类(对象__class__)
__del__方法: 对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源
'''
class Animal:
def __init__(self,name,color):
self.name=name
self.color=color
print('--------init-------')
def __str__(self):
return '我的名字是%s,我的颜色为%s'%(self.name,self.color)
def __new__(cls, *args, **kwargs):
print('--------new-------')
return object.__new__(cls)
dog =Animal('旺财','黑色')
print(dog)
"""结果如下"""
--------new-------
--------init-------
我的名字是旺财,我的颜色为黑色
"""__new__和__init__函数区别"""
__new__类的实例化方法:必须返回该实例 否则对象就创建不成功
__init__用来做数据属性的初始化工作,也可以认为是实例的构造方法,接收类的实例 self 并对其进行构造
__new__至少有一个参数是cls是代表要实例化的类,此参数在实例化时由Python解释器自动操作
__new__函数执行要早于__init__函数
class People:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return f'{self.name}今年{self.age}岁'
p=People('zhao',18)
print(p)
"""结果如下"""
zhao今年18岁
class People1:
def __init__(self,name,age):
self.name=name
self.age=age
def __del__(self):
print('run.......')
People1('lisi',12)
print('==========')
"""结果如下"""
run.......
==========
析构方法
'''
当一个对象被删除或者被销毁是,python解释器会默认调用一个方法,这个方法为__del__()方法,也被成为析构方法
'''
class Animals:
def __init__(self,name):
self.name=name
print('这是构造初始化方法')
def __del__(self):
print('当在某个作用域下面,没有被引用的情况下,解释器会自动调用此函数,来释放内存空间')
print('这是析构方法')
print('%s 这个对象被彻底清理了,内存空间被释放了'%self.name)
cat=Animals('猫猫')
# del cat #手动的清理删除对象
input('程序等待中......')
#当整个程序脚本执行完毕后会自动的调用_del_方法
# 当对象被手动摧毁时也会自动调用_del_方法
# 析构方法一般用于资源回收,利用_del_方法销毁对象回收内存资源