魔术方法与析构方法

发布于:2022-12-19 ⋅ 阅读:(620) ⋅ 点赞:(0)

魔术方法

魔术方法: __ 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_方法销毁对象回收内存资源



网站公告

今日签到

点亮在社区的每一天
去签到