python - isinstance() 和 issubclass() 返回冲突的结果

标签 python python-2.x

你如何解释 isinstance(Hello,object) 返回 Trueissubclass(Hello,object) 返回 False?

>>> class Hello:
    pass

>>> isinstance(Hello,object)
True
>>> issubclass(Hello,object)
False
>>> a = Hello()
>>> isinstance(a,object)
True

最佳答案

接受的答案是正确的,但似乎错过了重要的一点。内置函数isinstanceissubclass问两个不同的问题。

isinstance (object, classinfo) 询问 object 是否是 class 的实例(或类元组) .

issubclass (class, classinfo) 询问一个 class 是否是另一个类(或其他类)的子类。

在任一方法中,classinfo 都可以是“类、类型或类、类型和此类元组的元组”。

由于类本身就是对象,因此 isinstance 可以很好地应用。我们还可以询问一个类是否是另一个类的子类。但是,我们不一定要从这两个问题中得到相同的答案。

class Foo(object):
    pass

class Bar(Foo):
    pass

issubclass(Bar, Foo)
#>True
isinstance(Bar, Foo)
#>False

Bar 是 Foo 的子类,而不是它的实例。 Bar 是 type 的实例,它是 object 的子类,因此 Bar 类是 object 的实例。

isinstance(Bar, type)
#>True
issubclass(type, object)
#>True
isinstance(Bar, object)
#>True

关于python - isinstance() 和 issubclass() 返回冲突的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8107313/

相关文章:

python - 想要通过取其他传感器的平均值来替换 NaN

Python:这两个 import 语句有什么区别?

python - Django 异常未注册的命名空间

python - print 是 Python 中的一个函数吗?

urllib - 如何发送 POST 请求?

python - 更好地控制 python2 中丰富的比较运算符

python - 获取字符串模板中所有标识符列表的函数(Python)

python - 显示从文件中读取的 unicode

python - 按天过滤 django 查询