Gia*_*ear 29 python optimization coding-style class
只是好奇,
使用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)
Run Code Online (Sandbox Code Playgroud)
要么
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)
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 40
有很大的不同.
该__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
Run Code Online (Sandbox Code Playgroud)
有几个不同之处:
len(obj)语法foo.第一个需要obj.len().self.data构造后可以改变长度,则只有第二个版本将反映新的长度.| 归档时间: |
|
| 查看次数: |
30052 次 |
| 最近记录: |