有 很大的 不同。
该
__len__()方法是挂钩方法。该
len()函数 将使用该
__len__方法(如果存在)来查询对象的长度。
人们期望使用的 普通 API是该
len()方法,而使用
.len属性会偏离该规范。
如果
self.data预计长度不会改变,则可以始终将长度缓存在属性中并
.__len__()返回该属性。
class foo(object): def __init__(self, obs=None): if obs is None: # provide a default if no list was passed in. obs = [] self.data = obs self.max = max(obs) self.min = min(obs) self._data_len = len(obs) def __len__(self): return self._data_len



