你如何解释 isinstance(Hello,object)
返回 True 而 issubclass(Hello,object)
返回 False强>?
>>> class Hello:
pass
和
>>> isinstance(Hello,object)
True
>>> issubclass(Hello,object)
False
>>> a = Hello()
>>> isinstance(a,object)
True
最佳答案
接受的答案是正确的,但似乎错过了重要的一点。内置函数isinstance和 issubclass问两个不同的问题。
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/