isinstance()
.
Например:
if isinstance(variable, str):
# Код, выполняемый, если variable - строка
elif isinstance(variable, int):
# Код, выполняемый, если variable - целое число
Для проверки типа переменной в условии в Python можно использовать несколько способов, каждый из которых имеет свои особенности и подходит для разных сценариев:
type()
:Функция type()
возвращает тип объекта. Ее можно использовать для прямого сравнения с ожидаемым типом:
x = 5
if type(x) is int:
print("x - целое число")
elif type(x) is str:
print("x - строка")
else:
print("x - другой тип данных")
Важно: Используйте is
для сравнения типов, а не ==
. is
проверяет идентичность объектов (то есть, указывают ли они на одно и то же место в памяти), что более эффективно и корректно для типов, в отличие от ==
, который сравнивает значения.
isinstance()
:Функция isinstance()
проверяет, является ли объект экземпляром указанного класса (или класса из кортежа классов). Она также учитывает наследование:
class MyClass:
pass
x = MyClass()
if isinstance(x, MyClass):
print("x - экземпляр MyClass")
elif isinstance(x, (int, float)):
print("x - число")
else:
print("x - другой тип данных")
isinstance()
обычно предпочтительнее, чем type()
, так как она учитывает наследование. Например, если у вас есть подкласс `MySubClass` класса `MyClass`, то isinstance(x, MyClass)
вернет True
, даже если `x` является экземпляром `MySubClass`. type(x) is MyClass
вернет False
, если `x` экземпляр `MySubClass`.
В Python часто используется "утиная типизация" (Duck Typing). Вместо явной проверки типа, вы пробуете выполнить операцию, и обрабатываете исключение, если она не поддерживается. Это часто более гибкий и питоновский подход:
def add_one(x):
try:
return x + 1
except TypeError:
print("Аргумент не поддерживает операцию сложения с 1")
return None
print(add_one(5)) # Выведет 6
print(add_one("hello")) # Выведет "Аргумент не поддерживает операцию сложения с 1" и None
Этот подход предполагает, что если объект "выглядит как утка, крякает как утка, плавает как утка", то можно обращаться с ним как с уткой, не беспокоясь о его фактическом типе.
isinstance()
: Наиболее общий и рекомендуемый способ, особенно если важна поддержка наследования.type()
: Подходит, когда нужно проверить точное соответствие типу, без учета наследования. Реже используется на практике.В большинстве случаев рекомендуется использовать isinstance()
или Duck Typing, так как они более гибки и учитывают принципы объектно-ориентированного программирования.