Что делает метод isinstance в python?
Функция isinstance() принимает в качестве аргументов какой-либо объект и тип данных, а затем проверяет соответствие одного другому. В случае соответствия возвращает True , при несоответствии возвращает False :
x = isinstance(5, int) print(x) # => True
Вторым аргументом может быть не один тип данных, а сразу несколько, объединенных в кортеж. Функция вернет True , если объект принадлежит хотя бы к одному из них:
x = isinstance(5, (int, str, list, tuple, bool)) print(x) # => True
Помимо этого функция isinstance() проверяет, принадлежит ли объект указанному классу:
class myObj: name = "John" y = myObj() x = isinstance(y, myObj) print(x) # => True
Отличие type от isinstance
Хотя функция type() возвращает тип переданного аргумента, с ее помощью можно проверить, принадлежит ли аргумент тому или иному типу:
>>> a = 10 >>> b = [1,2,3] >>> type(a) == int True >>> type(b) == list True >>> type(a) == float False
В отличие от type() , функция isinstance() специально создана для проверки принадлежности данных определенному классу (типу данных):
>>> isinstance(a,int) True >>> isinstance(b,list) True >>> isinstance(b,tuple) False >>> c = (4,5,6) >>> isinstance(c,tuple) True
Кроме того isinstance() по сравнению с type() позволяет проверить данное на принадлежность хотя бы одному типу из кортежа, переданного в качестве второго аргумента:
>>> isinstance(a,(float, int, str)) True >>> isinstance(a,(list, tuple, dict)) False
Другое отличие isinstance() . Эта функция поддерживает наследование. Для isinstance() экземпляр производного класса также является экземпляром базового класса. Для type() это не так:
>>> class A (list): . pass . >>> a = A() >>> type(a) == list False >>> type(a) == A True >>> isinstance(a,A) True >>> isinstance(a,list) True
Функция isinstance() в Python, принадлежность экземпляра к классу
Позволяет проверить принадлежность экземпляра к классу
Синтаксис:
isinstance(object, classinfo)
Параметры:
- object — объект, требующий проверки,
- classinfo — класс, кортеж с классами или рекурсивный кортеж кортежей или с версии Python 3.10 может быть объединением нескольких типов (например int | str ).
Возвращаемое значение:
Описание:
Функция isinstance() вернет True , если проверяемый объект object является экземпляром любого указанного в classinfo класса (классов) или его подкласса (прямого, косвенного или виртуального).
Если объект object не является экземпляром данного типа, то функция всегда возвращает False .
Функцией isinstance() можно проверить класс, кортеж с классами (с Python 3.10 может быть записью, объединяющей нескольких типов, например, int | str ), либо рекурсивный кортеж кортежей. Другие типы последовательностей аргументом classinfo не поддерживаются.
Если аргумент classinfo не является классом, либо кортежем с классами (с Python 3.10 может быть записью, объединяющей нескольких типов, например, int | str ), то возбуждается исключение TypeError .
Изменено в Python 3.10: аргумент classinfo может иметь тип Union и записываться как побитовое или — | .
>>> isinstance(1, int | str) # True >>> isinstance("", int | str) # True
Доступ к пользовательскому типу для объекта union можно получить из types.UnionType и использовать для проверок isinstance() . Невозможно создать экземпляр объекта из типа:
>>> import types >>> isinstance(int | str, types.UnionType) # True >>> types.UnionType() # Traceback (most recent call last): # File "", line 1, in # TypeError: cannot create 'types.UnionType' instances
Примеры проверок принадлежности экземпляра к классу.
Взгляните на следующий код:
>>> a = 3 >>> isinstance(a, object) # True >>> type(a) == object # False >>> issubclass(type(a), object) # True
Молодые программисты часто не понимают что здесь происходит. Давайте разбираться.
Функция type() с одним аргументом object возвращает тип объекта — точный класс, из которого был создан переданный аргумент object . Мы знаем, что все целые числа в Python являются типом int . Это означает, что проверка объекта type(3) == object в точности эквивалентна проверке объекта int == object , что однозначно неверно.
В Python, как это известно — все является объектом, следовательно дочерний класс (в данном случае int ) наследуется от родительского (в данном случае object ) и считается, что такое поведение имеет отношение is a . Отношение is a — это то, что проверяет функция isinstance() .
Существует аналогичная функция issubclass() для проверки того же отношения, только для класса вместо экземпляра этого класса. В большинстве случаев isinstance(x, y) == issubclass(type(x), y) .
Классы всегда имеют одну и ту же ссылку в одной сессии интерпретатора, поэтому можно использовать оператор is вместо оператора == для сравнения. Таким образом, type(3) is int будет истинным.
Изобразим сказанное выше на примере:
class Base: def __init__(self): self.foo='foo' class Sub(Base): def __init__(self): super().__init__() >>> obj = Base() >>> sub_obj = Sub() >>> isinstance(obj, Base) # True >>> isinstance(obj, Sub) # False >>> isinstance(sub_obj, Base) # True >>> isinstance(sub_obj, Sub) # True >>> type(sub_obj) == Base # False >>> type(sub_obj) # >>> type(sub_obj) == Sub # True >>> issubclass(type(sub_obj), Base) # True
Общие приемы проверок.
>>> x = 1 >>> isinstance(x, int) # True >>> x = [1, 2, 3] >>> isinstance(x, list) # True >>> x = (1, 2, 3) >>> isinstance(x, tuple) # True # Проверим, является ли строка 'Hello' одним из типов, описанных в параметре type >>> isinstance('Hello', (float, int, str, list, dict, tuple)) # True # Проверка, на принадлежность к экземпляром myObj class myObj: name = "John" y = myObj() >>> isinstance(y, myObj) # True
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа
- Функция all(), все элементы True
- Функция any(), хотя бы один элемент True
- Функция ascii(), преобразует строку в ASCII
- Функция bin(), число в двоичную строку
- Класс bool(), логическое значение объекта
- Функция breakpoint(), отладчик кода
- Класс bytearray(), преобразует в массив байтов
- Класс bytes(), преобразует в строку байтов
- Функция callable(), проверяет можно ли вызвать объект
- Функция chr(), число в символ Юникода
- Класс classmethod, делает функцию методом класса
- Функция compile() компилирует блок кода Python
- Класс complex(), преобразует в комплексное число
- Функция delattr(), удаляет атрибут объекта
- Класс dict() создает словарь
- Функция dir(), все атрибуты объекта
- Функция divmod(), делит числа с остатком
- Функция enumerate(), счетчик элементов последовательности
- Функция eval(), выполняет строку-выражение с кодом
- Функция exec(), выполняет блок кода
- Функция filter(), фильтрует список по условию
- Класс float(), преобразует в вещественное число
- Функция format(), форматирует значение переменной
- Класс frozenset(), преобразует в неизменяемое множество
- Функция getattr(), значение атрибута по имени
- Функция globals(), переменные глобальной области
- Функция hasattr(), наличие атрибута объекта
- Функция hash(), хэш-значение объекта
- Функция help(), справка по любому объекту
- Функция hex(), число в шестнадцатеричную строку
- Функция id(), идентификатор объекта
- Функция input(), ввод данных с клавиатуры
- Класс int(), преобразует в тип int
- Функция isinstance(), принадлежность экземпляра к классу
- Функция issubclass(), проверяет наследование класса
- Функция iter(), создает итератор
- Функция len(), количество элементов объекта
- Класс list(), преобразовывает в список
- Функция locals(), переменные локальной области
- Функция map(), обработка последовательности без цикла
- Функция max(), максимальное значение элемента
- Класс memoryview(), ссылка на буфер обмена
- Функция min(), минимальное значение элемента
- Функция next(), следующий элемент итератора
- Класс object(), возвращает безликий объект
- Функция oct(), число в восьмеричную строку
- Функция open(), открывает файл на чтение/запись
- Функция ord(), число символа Unicode
- Функция pow(), возводит число в степень
- Функция print(), печатает объект
- Класс property(), метод класса как свойство
- Класс range(), генерирует арифметические последовательности
- Функция repr(), описание объекта
- Функция reversed(), разворачивает последовательность
- Функция round(), округляет число
- Класс set(), создает или преобразовывает в множество
- Функция setattr(), создает атрибут объекта
- Класс slice(), шаблон среза
- Функция sorted(), выполняет сортировку
- Декоратор staticmethod(), метод класса в статический метод
- Класс str(), преобразует объект в строку
- Функция sum(), сумма последовательности
- Функция super(), доступ к унаследованным методам
- Класс tuple(), создает или преобразует в кортеж
- Класс type(), возвращает тип объекта
- Функция vars(), словарь переменных объекта
- Функция zip(), объединить элементы в список кортежей
- Функция __import__(), находит и импортирует модуль
- Функция aiter(), создает асинхронный итератор
- Функция anext(), следующий элемент асинхронного итератора
46) тип () и isinstance ()
В Python есть встроенная функция type (), которая помогает вам найти тип класса переменной, заданной в качестве входных данных. Например, если вход является строкой, вы получите вывод в виде , для списка это будет и т. Д.
Используя команду type (), вы можете передать один аргумент, и возвращаемое значение будет типом класса данного аргумента, например: type (object).
Также возможно передать три аргумента в type (), то есть type (name, base, dict), в таком случае он вернет вам объект нового типа.
В этом уроке вы узнаете:
- Что такое type () в Python?
- Синтаксис для типа ():
- Пример типа ()
- Пример: использование type () для объекта класса.
- Пример: использование имени, оснований и dict в type ()
- Что такое isinstance () в Python?
- Синтаксис isinstance ():
- Примеры isinstance ()
- Разница между типом () и isinstance () в Python
Синтаксис для типа ():
type () может использоваться двумя способами, как показано ниже:
type(object) type(namr, bases, dict)
Параметры : тип (объект)
- объект: это обязательный параметр. Если это только параметр, переданный в type (), он вернет вам тип параметра.
Параметры : тип (имя, основания, дикт)
- имя: название класса.
- Основы: (необязательно). Это необязательный параметр, и это базовый класс
- dict: (необязательно). Это необязательный параметр, и это пространство имен, которое имеет определение класса.
Возвращаемое значение:
Если объект является единственным параметром, переданным type (), он вернет вам тип объекта.
Если параметры, передаваемые типу, являются типом (объект, базы, dict), в таком случае он вернет объект нового типа.
Пример типа ()
В этом примере у нас есть строковое значение, число, значение с плавающей запятой, комплексное число, список, кортеж, dict и set. Мы будем использовать переменные с типом, чтобы увидеть выходные данные для каждой из них.
str_list = "Welcome to Guru99" age = 50 pi = 3.14 c_num = 3j+10 my_list = ["A", "B", "C", "D"] my_tuple = ("A", "B", "C", "D") my_dict = my_set = print("The type is : ",type(str_list)) print("The type is : ",type(age)) print("The type is : ",type(pi)) print("The type is : ",type(c_num)) print("The type is : ",type(my_list)) print("The type is : ",type(my_tuple)) print("The type is : ",type(my_dict)) print("The type is : ",type(my_set))
Вывод:
The type is : The type is : The type is : The type is : The type is : The type is : The type is : The type is :
Пример: использование type () для объекта класса.
Когда вы проверяете объект, созданный из класса, используя type (), он возвращает тип класса вместе с именем класса. В этом примере мы создадим класс и проверим тип объекта, созданный из теста класса.
class test: s = 'testing' t = test() print(type(t))
Вывод:
Пример: использование имени, оснований и dict в type ()
Тип также может быть вызван с использованием синтаксиса: тип (имя, базы, dict).
Три параметра, передаваемые в type (), т. Е. Name, base и dict, являются компонентами, составляющими определение класса. Имя представляет имя класса, base – это базовый класс, а dict – это словарь атрибутов базового класса.
В этом примере мы собираемся использовать все три параметра: имя, базы и dict в type ().
Пример:
class MyClass: x = 'Hello World' y = 50 t1 = type('NewClass', (MyClass,), dict(x='Hello World', y=50)) print(type(t1)) print(vars(t1))
Когда вы передаете все три аргумента в type (), это помогает вам инициализировать новый класс с атрибутами базового класса.
Что такое isinstance () в Python?
Python isinstance is part of python built-in functions. Python isinstance() takes in two arguments, and it returns true if the first argument is an instance of the classinfo given as the second argument.
Syntax isinstance()
isinstance(object, classtype)
Parameters
- object: An object whose instance you are comparing with classtype. It will return true if the type matches otherwise false.
- class type: A type or a class or a tuple of types and/or classes.
Return value:
It will return true if the object is an instance of classtype and false if not.
Examples of isinstance()
In this section, we will study various examples to learn isinstance()
Example : isinstance() Integer check
The code below compares integer value 51 with type int. It will return true it the type of 51 matches with int otherwise false.
age = isinstance(51,int) print("age is an integer:", age)
age is an integer: True
Example : isinstance() Float check
In this example we are going to compare the float value with type float i.e. 3.14 value will be compare with type float.
pi = isinstance(3.14,float) print("pi is a float:", pi)
pi is a float: True
Example: isinstance() String check
message = isinstance("Hello World",str) print("message is a string:", message)
message is a string: True
Example : isinstance() Tuple check
The code checks for a tuple (1,2,3,4,5) with type tuple. It will return true if the input given is of type tuple and false if not.
my_tuple = isinstance((1,2,3,4,5),tuple) print("my_tuple is a tuple:", my_tuple)
my_tuple is a tuple: True
Example : isinstance() Set check
Код проверяет набор ( с заданным типом. Он вернет истину, если заданный тип ввода задан, и ложь, если нет.
my_set = isinstance(,set) print("my_set is a set:", my_set)
my_set is a set: True
Пример: проверка списка isinstance ()
Код проверяет список [1,2,3,4,5] с типом list. Он вернет истину, если данный ввод имеет тип списка, и ложь, если нет.
my_list = isinstance([1,2,3,4,5],list) print("my_list is a list:", my_list)
my_list is a list: True
Пример: проверка isinstance ()
Код проверяет наличие dict () с типом dict. Он вернет true, если данный ввод имеет тип dict и false, если нет.
my_dict = isinstance(,dict) print("my_dict is a dict:", my_dict)
my_dict is a dict: True
Пример: тест isinstance () для класса
Код показывает проверку типа класса с помощью isinstance (). Объект класса сравнивается с именем класса внутри isinstance (). Возвращает true, если объект принадлежит классу, и false в противном случае.
class MyClass: _message = "Hello World" _class = MyClass() print("_class is a instance of MyClass() : ", isinstance(_class,MyClass))
_class is a instance of MyClass() True
Разница между типом () и isinstance () в Python
class A: my_listA = [1,2,3] class B(A): my_listB = [1,2,3] print(type(A()) == A) print(type(B()) == A)
True False
class A: my_listA = [1,2,3] class B(A): my_listB = [1,2,3] print(isinstance(A(), A)) print(isinstance(B(), A))
True True
Резюме:
- В Python есть встроенная функция type (), которая помогает вам найти тип класса переменной, заданной в качестве входных данных. Например, если вход является строкой, вы получите вывод в виде , для списка это будет и т. Д.
- Для type () вы можете передать один аргумент, и возвращаемое значение будет типом класса данного аргумента, например, type (object).
- Также возможно передать три аргумента в type (), то есть type (name, base, dict), в таком случае он вернет вам объект нового типа.
- В Python есть встроенная функция instance (), которая сравнивает значение с указанным типом. Если данное значение и тип соответствуют, он вернет true, иначе false. Используя isinstance (), вы можете проверить строку, число с плавающей точкой, int, список, кортеж, dict, set, class и т. Д.
- Используя метод isinstance (), вы можете проверить строку, число с плавающей точкой, int, список, кортеж, dict, set, class и т. Д.