Неплохой вопрос.
class A:
pass
a = A()
print(isinstance(a, A)) #True
print(isinstance(object, A)) #False
print(isinstance(A, object)) #True
print(issubclass(A, A)) #True
print(issubclass(A, object)) #True
По определению isinstance
:
Возвращает логическое значение, указывающее, является ли объект экземпляром илиподкласс другого объекта.
С другой стороны issubclass
:
Возвращает тип Bool, указывающий, является ли объект подклассомкласс.
С дополнительным замечанием, что класс считается подклассом самого себя.
Обновление:
Кажется, это означает, что class1 является экземпляром class2, если и только если class2 является объектом, верно?
Вы получаете ответы путем тестирования, а логика очень проста.Класс - это класс, а объект - это экземпляр класса.
Вы можете проверить код, если вам действительно нужно понять реализацию .
Также вы можетенайдите тестовых случаев , если вы гик.
Объект должен быть создан для того, чтобы классифицировать для True
в следующих примерах:
class Foo: pass
class Bar(Foo): pass
print(isinstance(Bar(), Foo)) #True
print(isinstance(Bar(), Bar)) #True
print(Bar) #<class '__main__.Bar'>
print(Bar()) #<__main__.Bar object at 0x7f9fc8f32828>
Такженекоторые примеры здесь специфичны для Python3, если вы парень из Python2, вы должны знать, что вы должны быть более явными и писать:
class Bar(object): pass
Часть (object)
обязательна, если вы пишете Python-независимый код,Наконец, проверьте Стандарт на перегрузку isinstance () и issubclass () , но имейте в виду, что стандарты являются "живыми" и могут обновляться в будущем.
Наконец, вы можете проверить this по отношению к объектам классов.