VOOZH about

URL: https://www.geeksforgeeks.org/python/python-metaclass-__new__-method/

⇱ Python Metaclass __new__() Method - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Python Metaclass __new__() Method

Last Updated : 23 Jul, 2025

In Python, metaclasses provide a powerful way to customize the creation of classes. One essential method in metaclasses is __new__, which is responsible for creating a new instance of a class before __init__ is called. Understanding the return value of __new__ in metaclasses is crucial for implementing advanced class customization.

What is Python Metaclass __new__() Method?

In a metaclass, the __new__ method is responsible for creating a new instance of the class. The return value of this method determines what object will be passed to the __init__ method. By default, __new__ returns an instance of the class, but it can be customized to alter the creation process.

Syntax

class Meta(type):

def __new__(cls, name, bases, dct):

# Customization logic here

instance = super().__new__(cls, name, bases, dct)

return instance

  • cls: The metaclass itself.
  • name: The name of the class being created.
  • bases: The base classes of the class being created.
  • dct: A dictionary containing the class attributes.

Metaclass __new__() Method in Python

Below, are the example of Python Metaclass __new__ usage in Python:

Example 1: Altering Class Name

In this example, below Python code, a metaclass `CustomMeta` is defined, overriding the `__new__` method to prepend the class name with 'Custom'. The class `MyClass` is then created using this metaclass, resulting in the output of the modified class name, 'CustomMyClass'.


Output
CustomMyClass

Example 2: Singleton Metaclass

In this example, below Python code, a metaclass `SingletonMeta` is used to enforce the Singleton pattern. The `__new__` method ensures that only one instance of the class `SingletonClass` is created, and the subsequent objects `obj1` and `obj2` are identical, as indicated by the output `True` when comparing their identity using the `is` operator.


Output
False

Example 3: Attribute Validation

In this example, below Python code, the metaclass ValidationMeta is designed to validate that the attribute 'value' in classes using this metaclass is always an integer. When attempting to create an instance of the IntegerClass with a non-integer value, such as 'not_an_integer', a TypeError is raised, leading to the output of the error message "'value' must be an integer."


Output
IntegerClass() takes no arguments

Conclusion

In conclusion, Understanding the return value of __new__ in Python metaclasses allows developers to implement advanced class customization. Whether it's altering class names, enforcing singleton patterns, or validating attributes, the power of metaclasses can be harnessed through the careful customization of the __new__ method. By using the examples provided, developers can explore and apply these concepts to create more flexible and robust class structures in their Python programs.

Comment
Article Tags: