类中四个常用的内置方法:
__new__ | 创建对象时,被自动调用。 |
__init__ | 对象被初始化时,自动调用。 |
__del__ | 删除对象或对象被从内存中销毁前,自动调用。 |
__str__ | print 打印实例对象时自动调用。返回对象的描述信息。 |
__del__() 对象被销毁前自动调用
当一个对象被从内存中销毁前,会自动调用 __del__() 方法。
如果我们想要在对象被销毁前,再做一些事情,可以使用 __del__() 方法。__del__() 方法一旦被调用,这个对象的生命就走到尽头了。
class Person:
def __init__(self, name, age): # 对象创建的时候自动调用
self.name = name
self.age = age
def __del__(self): # 对象销毁前自动调用
print(f'{self.name}我被销毁了')
Tom = Person('张三', 21)
print(Tom.name)
print('--------------------')
当程序执行完毕后,内存中存储的类、函数、变量等都会自动释放内存,也就是对象会被自动回收。在上面的程序中,Tom 是一个全局变量,程序执行完后,才会被销毁。
del 关键字
可以通过 del 关键字删除对象属性或者删除实例对象。对象一旦被删除,它在内存中也会被销毁。当使用 del 删除对象后,系统会自动调用 __del__() 方法。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __del__(self):
print(f'{self.name}我被销毁了')
Tom = Person('张三', 21)
print(Tom.name)
# 删除Tom对象,在删除之前,会自动调用__del__方法
del Tom
# print(Tom.name) # NameError: name 'Tom' is not defined
print('--------------------') # Tom对象被提前使用del删除了,所以__del__方法比这句代码更早执行
__str__() 返回对象的描述信息
在实例对象中存储的是内存地址,当我们使用 print 输出实例对象时,默认会输出这个实例对象是由哪一个类创建的,以及在内存中的地址。如果在开发中,我们希望使用 print 输出实例对象时,能打印自定义的内容,就可以通过重写 __str__ 方法自定义输出内容。
一般用来返回类的作用,或者对象的状态。
要注意的是 __str__ 方法必须返回一个字符串。
1)如果没有重写 __str__() 方法,使用 print 调用实例对象变量名时,得到的是这个变量引用的对象是由哪一个类创建的,以及在内存中的地址。
class Demo:
pass
d = Demo()
# 如果没有重写 __str__() 方法,使用print调用实例对象变量名时,得到的是这个变量引用的对象是由哪一个类创建的,以及在内存中的地址
print(d) # <__main__.Demo object at 0x000001BA1D6525F0>
2)如果重写 __str__() 方法,打印的不再是内存地址,而是 __str__ 返回的内容。
注意:__str__ 必须有返回值,且必须返回一个字符串。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __del__(self):
print(f'{self.name}被销毁了__del__')
def __str__(self):
# 必须返回一个字符串
return '[%s]今年[%d]岁,__str__方法' % (self.name, self.age)
Tom1 = Person('李四', 21)
print(Tom1) # 打印的不再是内存地址,而是__str__返回的内容
4个常用内置方法的使用场景及对象的生命周期
1)__new__() :使用 类名() 创建实例对象时,自动调用 __new__() 方法为对象在内存中分配内存空间,然后返回对象的引用。Python 解释器获得对象的引用后,将这个引用作为第一个参数传给 __init__() 方法。
2)__init__() :创建实例对象时,为对象分配完内存空间后,自动调用。使创建的对象更加灵活,拥有自己特有的属性。
3)__del__() :对象被从内存中销毁前,自动调用。如果希望在对象被销毁前,再做一些事情,可以重写 __del__() 方法。
4)__str__() :使用 print() 打印输出对象时自动调用。返回对象的描述信息。
对象的生命周期:从使用 类名() 创建对象开始,到 对象的 __del__() 方法被调用结束。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
暂无评论内容