Why type of type is type in python?

I am a little bit confused about the object and type classes in Python 3. Maybe someone can clear up my confusion or provide some additional information.

My current understanding is that every class (except object) inherits from a base class called object. But every class (including object) is also an instance of the class type, which is an instance of itself and object and also inherits from object.

My questions are:

  • Is there a reason/design decision why object is an instance of type and type inherits from object? Has the type/class of an object also to be an object itself?

  • How can a class (type) be an instance of itself?

  • Which one is the real base class object or type?
    I always thought object would be the most "fundamental" class, but it seems to be an instance of type, which is an instance of object, which is an instance of type, ... Where does this recursion end?

  • Is there a possibility to illustrate the relation between the object and the type class?

I tried looking up the entries of object and type in the Documentation of the Python Standard Library.

Every class (except object) inherits from object.

>>> for x in object, int, float, str, list, dict:
...     print(f'{x.__name__:6}: {x.__bases__}')
... 
object: ()
int   : (<class 'object'>,)
float : (<class 'object'>,)
str   : (<class 'object'>,)
list  : (<class 'object'>,)
dict  : (<class 'object'>,)

Every class is an instance of the class type.

>>> for x in object, int, float, str, list, dict:
...     print(f'{x.__name__:6}: {x.__class__}')
... 
object: <class 'type'>
int   : <class 'type'>
float : <class 'type'>
str   : <class 'type'>
list  : <class 'type'>
dict  : <class 'type'>

type is an instance of itself.

>>> type.__class__
<class 'type'>

type also inherits from object.

>>> type.__bases__
(<class 'object'>,)

Also

>>> isinstance(object, type)
True
>>> isinstance(type, object)
True
>>> isinstance(type, type)
True
>>> isinstance(object, object)
True
>>> issubclass(type, object)
True
>>> issubclass(object, type)
False

What is type() in Python?

Python has a built-in function called type() that helps you find the class type of the variable given as input. For example, if the input is a string, you will get the output as <class ‘str’>, for the list, it will be <class ‘list’>, etc.

Using type() command, you can pass a single argument, and the return value will be the class type of the argument given, example: type(object).

It is also possible to pass three arguments to type(), i.e., type(name, bases, dict), in such case, it will return you a new type object.

In this tutorial, you will learn:

  • What is type() in Python?
  • Syntax for type():
  • Example of type()
  • Example: Using type() for class object.
  • Example: Using the name, bases, and dict in type()
  • What is isinstance() in Python?
  • Syntax isinstance():
  • Examples of isinstance()
  • Difference Between type() and isinstance() in Python

Syntax for type():

type() can be used in two ways as shown below:

 type(object)
type(namr, bases, dict)

Parameters: type(object)

  • object: This is a mandatory parameter. If this is only parameter passed to type(), than it will return you the type of the parameter.

Parameters: type(name, bases, dict)

  • name:name of the class.
  • bases: (optional). This is an optional parameter, and it is the base class
  • dict: (optional). This is an optional parameter, and it is a namespace that has the definition of the class.

Return Value:

If the object is the only parameter passed to type() then it will return you the type of the object.

If the params passed to type is a type(object, bases, dict), in such case, it will return a new type of object.

Example of type()

In this, example we have a string value, number , float value, a complex number, list, tuple , dict and set. We will use the variables with type to see the output for each of them.

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 = {"A":"a", "B":"b", "C":"c", "D":"d"}
my_set = {'A', 'B', 'C', 'D'}

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))

Output:

The type is :<class 'str'>
The type is :<class 'int'>
The type is :<class 'float'>
The type is :<class 'complex'>
The type is :<class 'list'>
The type is :<class 'tuple'>
The type is :<class 'dict'>
The type is :<class 'set'>

Example: Using type() for class object.

When you check the object created from a class using type(), it returns the class type along with the name of the class. In this example, we will create a class and check the object type created from the class test.

class test:
    s = 'testing'

t = test()
print(type(t))

Output:

<class '__main__.test'>

Example: Using the name, bases, and dict in type()

The type can be also called using the syntax: type(name, bases, dict).

The three parameters passed to type()i.e., name, bases and dict are the components that make up a class definition. The name represents the class name, the bases is the base class, and dict is the dictionary of base class attributes.

In this example, we are going to make use of all three params i.e name, bases, and dict in type().

Example:

class MyClass:
  x = 'Hello World'
  y = 50

t1 = type('NewClass', (MyClass,), dict(x='Hello World', y=50))
print(type(t1))
print(vars(t1))

Output:

<class 'type'>
{'x': 'Hello World', 'y': 50, '__module__': '__main__', '__doc__': None}

When you pass all three arguments to type() , it helps you to initialize new class with base class attributes.

What is isinstance() in 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.

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)

Output:

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)

Output:

pi is a float: True

Example: isinstance() String check

message = isinstance("Hello World",str)
print("message is a string:", message)

Output:

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)

Output:

my_tuple is a tuple: True

Example : isinstance() Set check

The code checks for a set ({1,2,3,4,5},with type set. It will return true if the input given is of type set and false if not.

my_set = isinstance({1,2,3,4,5},set)
print("my_set is a set:", my_set)

Output:

my_set is a set: True

Example: isinstance() list check

The code checks for a list [1,2,3,4,5],with type list. It will return true if the input given is of type list and false if not.

my_list = isinstance([1,2,3,4,5],list)
print("my_list is a list:", my_list)

Output:

my_list is a list: True

Example: isinstance() dict check

The code checks for a dict({“A”:”a”, “B”:”b”, “C”:”c”, “D”:”d”},with type dict. It will return true if the input given is of type dict and false if not.

my_dict = isinstance({"A":"a", "B":"b", "C":"c", "D":"d"},dict)
print("my_dict is a dict:", my_dict)

Output:

my_dict is a dict: True

Example: isinstance() test on a class

The code shows the type check of class with isinstance() . The object of the class is compared with the name of the class inside isinstance(). It returns true if the object belongs to the class and false otherwise.

class MyClass:
    _message = "Hello World"

_class = MyClass()

print("_class is a instance of MyClass() : ", isinstance(_class,MyClass))

Output:

_class is a instance of MyClass() True

Difference Between type() and isinstance() in Python

type()isinstance()
Python has a built-in function called type() that helps you find the class type of the variable given as input. Python has a built-in function called isinstance() that compares the value with the type given. If the value and type given matches it will return true otherwise false.
The return value is a type object The return value is a Boolean i.e true or false.
class A:
my_listA = [1,2,3]

class B(A):
my_listB = [1,2,3]

print(type(A()) == A)
print(type(B()) == A)

Output:

True
False

In case of type the subclass check gives back false.

class A:
my_listA = [1,2,3]

class B(A):
my_listB = [1,2,3]

print(isinstance(A(), A))
print(isinstance(B(), A))

Output:

True
True

isinstance() gives a truthy value when checked with a subclass.

Summary:

  • Python has a built-in function called type() that helps you find the class type of the variable given as input. For example, if the input is a string, you will get the output as <class ‘str’>, for the list, it will be <class ‘list’>, etc.
  • For type(), you can pass a single argument, and the return value will be the class type of the argument given, e.g., type(object).
  • It is also possible to pass three arguments to type(), i.e., type(name, bases, dict), in such case, it will return you a new type object.
  • Python has a built-in function called instance() that compares the value with the type given. It the value and type given matches it will return true otherwise false. Using isinstance(), you can test for string, float, int, list, tuple, dict, set, class, etc.
  • Using isinstance() method, you can test for string, float, int, list, tuple, dict, set, class, etc.

What is type type in Python?

Python type() The type() function either returns the type of the object or returns a new type object based on the arguments passed.

Why type is used in Python?

Python has a lot of built-in functions. The type() function is used to get the type of an object. When a single argument is passed to the type() function, it returns the type of the object. Its value is the same as the object.

Is type () a method?

The type() method either returns the type of the specified object or returns a new type object of the specified dynamic class, based on the specified class name, base classes and class body.

What is type object in Python?

Practical Data Science using Python Everything in Python is an object including classes. All classes are instances of a class called "type". The type object is also an instance of type class. You can inspect the inheritance hierarchy of class by examining the __bases__ attribute of a class object.