isinstance() and issubclass() return conflicting results

后端 未结 4 1957
既然无缘
既然无缘 2020-12-16 10:39
>>> class Hello:
    pass

and

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


        
4条回答
  •  半阙折子戏
    2020-12-16 11:33

    So basically isinstance(new_object, some_class) returns True if the object is an instantiated class of some_class. In other words, new_object is an some_class() object. issubclass checks if the object has a subclass of some_class.

    Better explained with a simple example that makes perfect sense:

    class some_class():
      pass
    
    class new_object_class(some_class):
      pass
    
    instance_object = new_object_class()
    
    isinstance(instance_object, new_object_class) == True
    issubclass(instance_object, some_class) == True
    
    isinstance(new_object_class,some_class) == True
    issubclass(new_object_class,some_class) == True
    

    No need for false tests to explain this.

提交回复
热议问题