1.__init __ ;__new __ ; __del __
__init __ 方法是Python最基本的魔術(shù)方法,通過此方法我們可以定義一個(gè)對象的初始操作,實(shí)際上它背后還有一個(gè)__new __方法。__new __是用來創(chuàng)建類并返回這個(gè)類的實(shí)例, 而__init __只是將傳入的參數(shù)來初始化該實(shí)例。
對象生命周期調(diào)用結(jié)束時(shí),__del __ 方法會(huì)被調(diào)用。
class A:
def __init__(self, name):
self.name = name
print(self.name)
def __del__(self):
print('del', self.name)
if __name__ == '__main__':
a = A('王一帆')
b = A('王二帆')
c = A('王三帆')

image.png
下面這個(gè)例子,可以讓你更加形象的看到垃圾回收機(jī)制的運(yùn)作:
import time
class A:
def __init__(self, name):
self.name = name
print(self.name)
def __del__(self):
print('del', self.name)
if __name__ == '__main__':
a = A('王一帆')
b = a
del a # 由于a被b引用,因此刪除a不會(huì)使對象被回收
print('==================')
time.sleep(3)
del b

image.png
由此可見當(dāng)對象不再被使用時(shí),該對象就會(huì)被python的垃圾回收機(jī)制回收掉.
2.__str __和__rep __
_str __相當(dāng)于是str()方法 而__repr __相當(dāng)于repr()方法。str是針對于讓人更好理解的字符串格式化,而repr是讓機(jī)器更好理解的字符串格式化。
在使用print()方法的時(shí)候,print首先調(diào)用的就是類里面的定義的__str __如下所示:
class A:
def __init__(self, name):
self.name = name
def __str__(self):
return 'A的實(shí)例對象str%s' % self.name
def __repr__(self):
return 'A的實(shí)例對象repr'

image.png