Python 其中number==int(number)无法将number变量分类为整数?

Python 其中number==int(number)无法将number变量分类为整数?,python,python-3.x,Python,Python 3.x,我知道isinstance(),但我只是好奇为什么我们不使用: number==int(number)。简言之:这两种方法做的事情完全不同:检查可能会返回True,如果某个对象不是int,它将针对许多要转换为int的类型引发ValueError或TypeError,甚至有时,上面的语句也可能返回False isinstance(…)方法进一步明确了您正在做什么,并且更方便。例如,您可以使用isinstance(1.0,(int,float))检查某个对象是int还是float 案例1:对于非i

我知道isinstance(),但我只是好奇为什么我们不使用:
number==int(number)。

简言之:这两种方法做的事情完全不同:检查可能会返回
True
,如果某个对象不是
int
,它将针对许多要转换为
int
的类型引发
ValueError
TypeError
,甚至有时,上面的语句也可能返回
False

isinstance(…)
方法进一步明确了您正在做什么,并且更方便。例如,您可以使用
isinstance(1.0,(int,float))
检查某个对象是
int
还是
float


案例1:对于非
int
s,返回
True
因为不能保证这只会为
int
eger返回
True
,甚至可能引发错误

一个简单的反例是
1.0
。这是一个浮动:

>>> number = 1.0
>>> type(number)
<class 'float'>
>>> number == int(number)
True
这会产生一个
ValueError
,因为当我们想将其转换为
int
时,
'foo'
毫无意义

案例3:提出一个
TypeError
并非所有类都实现
\uuuuu int\uuuu
函数,该函数在窗帘后面被调用以转换为
int
。例如,一个简单的对象没有这样的函数。在这种情况下,它将引发类型错误:

>>> int(object())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: int() argument must be a string, a bytes-like object or a number, not 'object'
如果我们检查上述内容,我们会看到:

>>> foo = Foo()
>>> foo == int(foo)
False
>>> isinstance(foo, int)
True

在许多情况下,因为
False
ValueError
TypeError
更有用。因为
int(…)
将某物转换为
int
。此外,由于
=
可以重载,这意味着非int可以与之匹配。一个简单的反例是:
14.00
的类型是
float
,但是
number==int(number)
将在这里工作。
class Foo(int):

    def __eq__(self, other):
        return isinstance(other, Foo)

    def __int__(self):
        return self
>>> foo = Foo()
>>> foo == int(foo)
False
>>> isinstance(foo, int)
True