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' })