Python MetaClasess The Real Use

A class-of-a-class is called MetaClass. The real use of Metaclass is good to know for beginners. All languages don’t support this. But Python supports it since it follows Smalltalk. Here, you will know how to create metaclass and its use cases.

Below is the list of all sections. Go ahead and click on any of these links to go to that section.

  1. How to Identify Metaclass
  2. Why You Need Metaclass
  3. Ordinary Vs. MetaClass
  4. Use Cases of MetaClass
  5. Best Example of Python2 MetaClass
  6. Best Example of Python3 MetaClass
  7. Further Reading

How to Identify Metaclass


class Meta(type):     

# The keyword argument is 'type'
# so this is the MetaClass

class MyClass(metaclass=Meta):

# This is not MetaClass, since, it has
# keyword argument metaclass=Meta

class MySubclass(MyClass):

# This is not MetaClass, is inherited
# from MyClass.

Why You Need Metaclass

  • You can create MetaClass like any ordinary class
  • The Metaclass is called automatically when you call it from another class


class LittleMeta(type):
def __new__(cls, clsname, superclasses, attributedict):
print("clsname: ", clsname)
print("superclasses: ", superclasses)
print("attributedict: ", attributedict)
return type.__new__(cls, clsname, superclasses, attributedict)

We will use the metaclass "LittleMeta" in the following example:
class S:
class A(S, metaclass=LittleMeta): -> called automatically

a = A()
clsname: A
superclasses: (<class '__main__.S'>,)
attributedict: {'__module__': '__main__', '__qualname__': 'A'}

Ordinary Vs. Metaclass

Python uses the type function to create classes since type is actually a metaclass. The type function is the metaclass that Python uses to create class objects, but you can also create your own metaclasses.

SomeClass = MetaClass() 
object = SomeClass()
SomeClass = type('SomeClass', (), {})
How to Understand Metaclass in Python Step By Step
Python Metaclass


How to Understand Metaclass in Python Step By Step

Use Cases of Metaclass

  1. logging and profiling
  2. interface checking
  3. registering classes at creation time
  4. automatically adding new methods
  5. automatic property creation
  6. proxies
  7. automatic resource locking/synchronization.

Python2 Metaclass

In Python 2, metaclasses are set by defining the __metaclass__ variable. This variable can be any callable accepting argument, such as name, bases, and dict.

class MyBase (object):

class MyMeta (type):

class MyClass (MyBase):
__metaclass__ = MyMeta

Python3 Metaclass

In Python 3, metaclasses are set using the keyword metaclass.

class MyBase (object):

class MyMeta (type):

class MyClass (MyBase, metaclass=MyMeta):


Subscribe Today.

Join 1,895 other followers


AWS VPC Top Companies Interview Questions

Here’re the top interview questions on AWS virtual private cloud. This article covered VPC, subnet, Route Table, and the IGW.

CICS CEMT Resources That You Can Change Status

CEMT is Master Terminal Transaction in CICS. With the CEMT transaction, you can change the status for various resources such as Program, Mapset, File, Queue, Task, Terminal, and Transaction. CICS CEMT Command Examples CEMT SET FILE(name) { ENABLED | DISABLED } { OPEN | CLOSED } CEMT SET PROGRAM(name) { ENABLED | DISABLED } […


Something went wrong. Please refresh the page and/or try again.

Author: Srini

Experienced software developer. Skills in Development, Coding, Testing and Debugging. Good Data analytic skills (Data Warehousing and BI). Also skills in Mainframe.