Является ли объект подклассом типа в Python 2.X? - PullRequest
0 голосов
/ 14 октября 2018

Я прочитал в Learning Python (5-е издание), что (на странице 1364, глава 40):

В Python 2.X классы нового стиля наследуются от object , который является подклассом типа ;классические классы являются экземплярами типа и не создаются из класса.

Однако

issubclass(object, type)

дает мне

False

в Python 2.7.

Итак, похоже, что автор сделал ложное утверждение, что объект является подклассом типа или я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

object не является подклассом type, что делает его метаклассом .Вместо этого object - это экземпляр типа type.

Функция issubclass проверяет, унаследован ли данный класс от другого.

class A:
    pass

class B(A):
    pass

print(issubclass(B, A)) # True

Не проверяется, является ли экземпляр OS данного типа.Чтобы проверить, действительно ли object имеет тип type, вы хотите использовать isinstance.

print(isinstance(object, type)) # True
0 голосов
/ 14 октября 2018

Используйте isinstance() python 2.7.10

print object
print isinstance(object, type)
print issubclass(object, type)
print object.__class__

output

<type 'object'>
True
False
<type 'type'>

type является метаклассом, как объяснено здесь

...