Python中的非空字符串应该具有一个真实的值。为什么如果我显式地调用__bool__()函数,就会得到一个错误?但是,如果我使用if语句,它似乎是在计算。
>>> myvar = 'test'
>>> myvar.__bool__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__bool__'
>>> if myvar:
... print("myvar TRUTHY")
...
myvar TRUTHY
>>>发布于 2020-07-19 00:56:24
字符串没有__bool__()方法(这是错误告诉您的)。相反,python将调用字符串上的__len__(),如果它不是零,则返回True。作为python 数据模型提及
当未定义此方法时,如果定义了
__len__(),则调用它;如果对象的结果为非零,则该对象被视为真。如果一个类既没有定义__len__()也没有定义__bool__(),那么它的所有实例都被认为是真的。
您可以通过创建UserString (或str)的子类并注意何时调用__len__()来验证这一点。当您在布尔上下文中使用字符串时,它将被调用:
from collections import UserString
class myString(UserString):
def __len__(self):
print("length called")
return super().__len__()
s = myString("hello")
if s:
pass
# prints "length called"
bool(s)
# length called
# True发布于 2020-07-19 00:58:17
根据Python文档,真值检验取决于__bool__和__len__方法。对于字符串,由于__bool__方法未定义,字符串的真值取决于定义的__len__方法。
https://stackoverflow.com/questions/62975207
复制相似问题