1:工厂函数
由于类型和类的统一,因而可以子类化Python数据类型。但是所有的Python 内建的转换函数现在都是工厂函数。当这些函数被调用时,你实际上是对相应的类型进行实例化。比如下面的函数都已经成为工厂函数:int(), long(), float(), complex(), str(), unicode(), list(), tuple(), type()。
2__slots__类属性
字典属于实例的“心脏”。__dict__属性跟踪所有实例属性。比如有一个实例inst.它有一个属性foo,那使用inst.foo来访问它与使用inst.__dict__['foo']来访问是一致的。
字典会占据大量内存,如果有一个属性数量很少的类,但有很多实例,那么出于内存上的考虑,可以使用__slots__属性来替代__dict__。
__slots__是一个类变量,是一序列型对象,是实例属性的集合。它可以是一个列表,元组或可迭代对象。也可以是标识实例能拥有的唯一的属性的简单字符串。任何试图创建一个其名不在__slots__中的名字的实例属性都将导致AttributeError 异常,比如:
class SlottedClass(object):
__slots__ = ('foo','bar')
>>> c = SlottedClass()
>>> c.foo = 42
>>> c.xxx = "don't think so"
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'SlottedClass' object has no attribute
'xxx'
这种特性的主要目的是节约内存。其副作用是禁止用户随心所欲的动态增加实例属性。带__slots__属性的类定义不会存在__dict__了。