只是好奇
在构建类时,使用len()
或def __len__()
有什么区别(优点和缺点)吗?哪种是最好的Python风格?
class foo(object):
def __init__(self,obs=[])
self.data = obs
self.max = max(obs)
self.min = min(obs)
self.len = len(obs)
或者
class foo(object):
def __init__(self,obs=[])
self.data = obs
self.max = max(obs)
self.min = min(obs)
def __len__(self):
return len(self.data)
有一个巨大的差异。
__len__()
方法是一个钩子方法。如果存在len()
函数将使用__len__
方法查询对象的长度。人们期望使用的normalAPI是
len()
方法,而使用.len
属性将偏离该规范。如果不希望更改
self.data
的长度,则始终可以在属性中缓存该长度,并让.__len__()
返回该属性。有几个不同点:
foo
提供熟悉的len(obj)
语法。第一个需要obj.len()
。self.data
的长度可以改变构建后的长度,则只有第二个版本将反映新的长度。相关问题 更多 >
编程相关推荐