class Road(type): pass class X(): pass print(type('Hello', (), {})) print(Road('Hello', (), {})) # Equivalent to Road('Hello', (), {}) print(type.__new__(type, 'Hello', (), {})) print(Road.__new__(Road, 'Hello', (), {})) # Equivalent to Road('Hello', (), {}) print(type.__new__(type, X)) print(type.__new__ is Road.__new__) print(Road.__new__(Road, X)) # TypeError: type.__new__() takes exactly 3 arguments (1 given)