一、内置办法:
1.1 __del__办法
在 python 中,当应用类名 () 创建对象时,为对象调配完空间后,主动调用__init__办法,当一个对象被从内存中销毁前,会主动调用__del__办法。(__del__英文状态下的 del 左右一边各两个下划线)
利用场景:
init : 革新初始化办法,能够让创建对象更加灵便。
del:如果心愿在对象被销毁前再做一些事件,能够考虑一下__del__办法。
生命周期:
一个对象从调用类名 () 创立,生命周期开始。
一个对象的__del__办法一旦被调用,生命周期完结。
在对象的生命周期内,能够拜访对象属性或者让对象调用办法。
1.1.1 __del__代码演练
首先先来一段没有__del__办法的代码
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
black = Cat("小黑")
print(black.name)
执行后果:
再来一段有__del__办法的代码
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 走了" % self.name)
black = Cat("小黑")
print(black.name)
执行后果:
执行后果有小黑走了,然而咱们并没有调用__del__办法,因为这个办法是在对象被从内存中销毁之前由零碎主动调用的。
再次革新以上代码,减少一个分隔线:
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 走了" % self.name)
black = Cat("小黑")
print(black.name)
print("-" * 30)
问题:此时能够猜一猜,小黑走了是在分隔线下面输入还是上面输入?
答案:在分隔线下方输入。
起因:因为 black 这个变量在以后模块中是全局变量,所以当所有的代码实现执行之后,零碎会把 black 这个变量进行回收,在回收之前就主动执行了__del__办法。
执行后果:
应用 del 办法删除 black 对象代码:
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 走了" % self.name)
black = Cat("小黑")
print(black.name)
del black
print("-" * 30)
执行后果:小黑走了在下划线下方输入
起因:因为 del 关键字能够删除一个对象,当应用 del 关键字把 black 对象删除之后,零碎会主动帮咱们调用__del__办法,把这个办法执行实现之后才会执行前面的那句打印分隔线代码。
以上整体代码截图:
2.1 __str__办法
在 python 中,应用 print 输入对象变量,默认状况下,会输入这个变量援用的对象是由哪一个类创立的对象,以及在内存中的地址(十六进制示意)
如果在开发中,心愿应用 print 输入对象变量时,可能打印自定义的内容,就能够利用__str__这个内置办法了。(也就是不心愿输入默认状况下的类和内存地址内容,而是咱们本人心愿输入的内容,这个时候用__str__内置办法)
留神:__str__这个办法必须返回一个字符串。
2.1.1 代码演练:
1. 在默认状况下应用 print 看到的代码成果:
输入这个变量援用的对象是由哪一个类创立的对象,以及在内存中的地址。
2. 应用__str__内置办法
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 走了" % self.name)
def __str__(self):
# 必须返回一个字符串
return "我是小猫 %s" % self.name
# black 是一个全局变量
black = Cat("小黑")
print(black)
执行后果:
并没有以上默认的一些对象信息,而是咱们本人想要输入的定义的一些内容
对于面向对象方面的 Python 收费教程能够戳链接去看看,有文章也有视频。