内置方法
__new__
在__init__之前,实例化的对象的第一步是__new__创建了一个空间
1 class Foo: 2 def __init__(self): #初始化方法 3 print('执行了init') 4 5 def __new__(cls, *args, **kwargs): #构造方法 6 object.__new__(cls) 7 print('执行了new') 8 return object.__new__(cls) 9 obj = Foo() 10 #执行了new 11 #执行了init
设计模式 常用的有23种 (始于java)
单例模式
一个类,只有一个实例的时候,用单例模式
1 class Foo: 2 __qwer = None 3 4 def __init__(self, name, age): #初始化方法 5 self.name = name 6 self.age = age 7 8 def __new__(cls, *args, **kwargs): #构造方法 9 if cls.__qwer is None: 10 cls.__qwer = object.__new__(cls) 11 return cls.__qwer 12 13 14 obj1 = Foo('wang', 18) 15 obj2 = Foo('rui', 20) 16 print(obj1.name, obj2.name) 17 #rui rui 18 #无论实例化多少个对象,他们的内存地址是相同的,也就是说结果是最后一个对象的属性
__del__
析构方法:在删除一个类创建的对象的时候会先触发__del__方法,在删除这个对象
1 class Foo: 2 def __init__(self, name, age): 3 self.name = name 4 self.age = age 5 self.file = open('file', mode='w') 6 7 def write(self): 8 self.file.write('qwerdf') 9 10 def __del__(self):#析构方法:删除类创建的对象时先执行这个方法,再删除对象 11 #做一些清理工作,比如文件的关闭,关闭网络链接,数据库的链接等 12 self.file.close() 13 print('执行了del') 14 15 16 f = Foo('wang', 18) 17 print(f) 18 #<__main__.Foo object at 0x00000248B55C0390>(对象的内存地址) 19 #执行了del
__len__