由于某些原因,尽管Python是“明确的”指南,但很多类型都可以隐式转换为布尔值。总之...
在适当的情况下,使自定义类也可以隐式转换为bool是不是惯用?如果是,我应该(重新)定义什么功能?在我的具体案例中,我有一个Image
类;我希望它可以转换为bool,当它保存从某个地方(文件)加载的数据时为True
,否则为False
。
答案 0 :(得分:3)
这个可以是惯用的;例如,容器对象在空时应该测试为false。您应该在Python 2.x中定义__nonzero__
,在Python 3中定义__bool__
来进行转换。编写面向Python 2和3的代码时,请同时定义它们。
但是,为了与“明确优于隐式”指南保持一致,您可能只想改为if img.is_loaded():
。 __nonzero__
/ __bool__
存在的主要原因是容器,它反映在Python数据模型的描述中:“如果未定义此方法,则调用__len__()
,如果是如果结果非零,则该对象被认为是真的。“所以它是len(obj) == 0
的真正简写,也许是通过更快的检查来实现的。