Custom Meta-Classes

Understand creating custom metaclasses in detail.

In this section, we’ll create a metaclass without type(). To create a custom metaclass we have to inherit type metaclass and override __init__() and __new__().

Overriding the methods

Before overriding the methods, let’s first get an overview on their functionality.

  • __new__: It creates a new object and returns it. Before the control goes to __init__(), __new__() is called.

  • __init__: It initializes the created object.

Example

Let’s code an example.

Press + to interact
# Defining a class
class A:
pass
# Defining our own new method
def new(cls):
x = object.__new__(cls)
x.attr = 1
return x
# override __new__() method
A.__new__ = new
# Making an object and testing
obj = A()
print(obj.attr)

In the above example, you can see that we make an empty class with no namespace. Then, we define a class method ...