内置方法补充以及序列模块初识

内置方法

__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
init,new执行顺序

设计模式   常用的有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__

猜你喜欢

转载自www.cnblogs.com/zhigu/p/9578099.html