Python:类的__slots__魔法,列表辗平,类的一行式构造器

__slots__魔法

在Python中,每个类都有实例属性。默认情况下Python⽤⼀个字典来保存⼀个对象的实例属性。这⾮常有⽤,因为它允许我们在运⾏时去设置任意的新属性。
Python不能在对象创建时直接分配⼀个固定量的内存来保存所有的属性。对于创建成千上万个对象时,会消耗掉许多内存。
可使用__slots__方法告诉Python不要使用字典,而且只给一个固定集合的属性分配空间
 1 # 下面代码不使用__slots__
 2 class MyClass(object):
 3     def __init__(self, name, identifier):
 4         self.name = name
 5         self.identifier = identifier
 6         self.set_up()
 7 
 8 # 下面代码使用__slots__
 9 class MyClass(object):
10     __slots__ = ['name', 'identifier']
11     def __init__(self, name, identifier):
12         self.name = name
13         self.identifier = identifier
14         self.set_up()
15 # 第⼆段代码会为你的内存减轻负担。
1 # 列表辗平,通过使⽤itertools包中的itertools.chain.from_iterable轻松快速的辗平⼀个列表
2 import itertools
3 a_list = [[1, 2], [3, 4], [5, 6]]
4 print(list(itertools.chain.from_iterable(a_list)))
5 
6 # 一行式的构造器,避免类初始化时大量重复的赋值语句
7 class A(object):
8     def __init__(self, a, b, c, d, e, f):
9         self.__dict__.update({k:v, for k,v in locals().items() if k != 'self' })

 

 
posted @ 2018-11-14 14:32  远方那一抹云  阅读(311)  评论(0编辑  收藏  举报