Python Boolean:为什么类和;在评估值和变量中的类实例?

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

在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()
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。我不知道为什么对我的问题投了反对票,而代码中显然存在问题。