type() — get exact type
x = 5
print(type(x)) #
y = "hello"
print(type(y)) #
# Compare types:
if type(x) == int:
print("x is an integer")
isinstance() — check type (preferred)
isinstance() is usually better because it handles inheritance:
x = 5
# Check if x is int:
if isinstance(x, int):
print("x is an integer")
# Check multiple types:
if isinstance(x, (int, float)):
print("x is a number")
Why isinstance() is better
isinstance() works with inheritance, type() doesn't:
class Animal:
pass
class Dog(Animal):
pass
my_dog = Dog()
# isinstance handles inheritance:
print(isinstance(my_dog, Dog)) # True
print(isinstance(my_dog, Animal)) # True (Dog inherits from Animal)
# type() doesn't:
print(type(my_dog) == Dog) # True
print(type(my_dog) == Animal) # False (exact type only)
Common use cases
def process_data(data):
if isinstance(data, list):
return sum(data)
elif isinstance(data, dict):
return len(data)
else:
return "Unknown type"
print(process_data([1, 2, 3])) # 6
print(process_data({'a': 1})) # 1