The type() function either returns the type of the object or returns a new type object based on the arguments passed.
Example
prime_numbers = [2, 3, 5, 7]
# check type of prime_numbers
result = type(prime_numbers)
print(result)
# Output: <class 'list'>
type() Syntax
The type() function has two different forms:
# type with single parameter type(object) # type with 3 parameters type(name, bases, dict)
type() Parameters
The type() function either takes a single object parameter.
Or, it takes 3 parameters
- name - a class name; becomes the __name__ attribute
- bases - a tuple that itemizes the base class; becomes the __bases__attribute
- dict - a dictionary which is the namespace containing definitions for the class body; becomes the __dict__attribute
type() Return Value
The type() function returns 
- type of the object, if only one object parameter is passed
- a new type, if 3 parameters passed
Example 1: type() with Object parameter
numbers_list = [1, 2]
print(type(numbers_list))
numbers_dict = {1: 'one', 2: 'two'}
print(type(numbers_dict))
class Foo:
    a = 0
foo = Foo()
print(type(foo))
Output
<class 'list'> <class 'dict'> <class '__main__.Foo'>
If you need to check the type of an object, it is better to use the Python isinstance() function instead. It's because the isinstance() function also checks if the given object is an instance of the subclass.
Example 2: type() With 3 Parameters
o1 = type('X', (object,), dict(a='Foo', b=12))
print(type(o1))
print(vars(o1))
class test:
  a = 'Foo'
  b = 12
  
o2 = type('Y', (test,), dict(a='Foo', b=12))
print(type(o2))
print(vars(o2))
Output
<class 'type'>
{'a': 'Foo', 'b': 12, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'X' objects>, '__weakref__': <attribute '__weakref__' of 'X' objects>, '__doc__': None}
<class 'type'>
{'a': 'Foo', 'b': 12, '__module__': '__main__', '__doc__': None}
In the program, we have used the Python vars() function which returns the __dict__ attribute. __dict__ is used to store object's writable attributes.
You can easily change these attributes if necessary. For example, if you need to change the __name__ attribute of o1 to 'Z', use:
o1.__name = 'Z'
Also Read:
