Python Boolean:为什么类和;在评估值和变量中的类实例?
在python中,我们都知道,除了空值(如Python Boolean:为什么类和;在评估值和变量中的类实例?,python,Python,在python中,我们都知道,除了空值(如()、[]、{}、”、数字0和值None)之外,没有多少值的计算结果为False。当然,值False的计算结果为False。但是在这里我有一些代码,我不理解为什么在print()函数输出中存在差异。代码如下: class myclass(): def __len__(self): return 0 # even return False will give us the same answer. myobj = myclass() pr
()、[]、{}、”、数字0和值None
)之外,没有多少值的计算结果为False。当然,值False的计算结果为False。但是在这里我有一些代码,我不理解为什么在print()
函数输出中存在差异。代码如下:
class myclass():
def __len__(self):
return 0 # even return False will give us the same answer.
myobj = myclass()
print(bool(myobj)) # False
print(bool(myclass())) # False
# this is an instance of a class
print(bool(myclass)) # True
#this is a class
那么现在为什么bool(myobj)
与bool(myclass)
不同,而myobj=myclass()
我希望这两个类的输出都是
False
,但实际输出是False
和True
首先myclass()
和myclass
是不同的myclass()
是类实例,myclass
像int一样是一个对象。在您的问题中,myobj
等于myclass()
,myobj的计算结果为false是因为返回0
,而myclass
的计算结果为true是因为类的布尔值为true。是因为myclass
和myclass()
不一样myclass
是一个类,myclass()
是该类的一个实例bool(myobj)
和bool(myclass())
都将返回False
myobj
和myclass
是完全不同的事情。为什么你会期望它们具有相同的真值?除了其他人发布的答案外,\uuuu len\uuuu
不是设置对象真值的最佳替代方法;在Python3中应该使用\uuuuu bool\uuuuu
,或者在Python2中应该使用\uuuu nonzero\uuuuuu
只能用于某种形式的长度或大小。我错过了这个“()”,所以输出是正确的,谢谢@marceline。我不知道为什么对我的问题投了反对票,而代码中显然存在问题。