勘误
fraaannn opened this issue · comments
https://github.com/piglei/one-python-craftsman/blob/master/zh_CN/2-if-else-block-secrets.md
`上面的代码里,判断 UserCollection 是否有内容时用到了 users._users 的长度。其实,通过为 UserCollection 添加 len 魔法方法,上面的分支可以变得更简单:
class UserCollection:
def __init__(self, users):
self._users = users
def __len__(self):
return len(self._users)
users = UserCollection([piglei, raymond])
定义了 len 方法后,UserCollection 对象本身就可以被用于布尔判断了
if users:
print("There's some users in collection!")
`
应该是 if len(users):
你好,这里不是错误。这里想要说明的点就是,在定义了 __len__
方法之后,Python 就会以这个长度函数返回值是否为 0 来判断布尔真假。
如果用列表来举例:
In [1]: empty_list = []
# 我们一般不在列表上再调用一次 len 来判断它是“真还是假”
In [2]: bool(len(empty_list))
Out[2]: False
# 直接在列表上调用 bool 更常见
In [3]: bool(empty_list)
Out[3]: False