隐含地使一个类可以转换为bool是一种惯用语吗?

时间:2011-12-04 18:02:28

标签: python

由于某些原因,尽管Python是“明确的”指南,但很多类型都可以隐式转换为布尔值。总之...

在适当的情况下,使自定义类也可以隐式转换为bool是不是惯用?如果是,我应该(重新)定义什么功能?在我的具体案例中,我有一个Image类;我希望它可以转换为bool,当它保存从某个地方(文件)加载的数据时为True,否则为False

1 个答案:

答案 0 :(得分:3)

这个可以是惯用的;例如,容器对象在空时应该测试为false。您应该在Python 2.x中定义__nonzero__,在Python 3中定义__bool__来进行转换。编写面向Python 2和3的代码时,请同时定义它们。

但是,为了与“明确优于隐式”指南保持一致,您可能只想改为if img.is_loaded():__nonzero__ / __bool__存在的主要原因是容器,它反映在Python数据模型的描述中:“如果未定义此方法,则调用__len__(),如果是如果结果非零,则该对象被认为是真的。“所以它是len(obj) == 0的真正简写,也许是通过更快的检查来实现的。