import builtins
from functools import partial
class Object:
def __repr__(self):
cls = type(self)
return f'<{cls.__module__}.{cls.__qualname__} object>'
class Type(type):
def __new__(metacls, name, bases=None, namespace=None, **kwargs):
if bases is None:
return __class__.__base__(name)
if all(base.__repr__ is object.__repr__ for base in bases):
if bases and bases[-1] is object:
bases = bases[:-1]
bases += Object,
return super().__new__(metacls, name, bases, namespace, **kwargs)
builtins.type = Type
builtins.__build_class__ = partial(__build_class__, metaclass=type)
from enum import Enum
class A:
pass
B = type('B', (A,), {})
class C(Enum):
c = B()
print(A())
print(B())
print(C.c.value)
aW1wb3J0IGJ1aWx0aW5zCmZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCgpjbGFzcyBPYmplY3Q6CiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgY2xzID0gdHlwZShzZWxmKQogICAgICAgIHJldHVybiBmJzx7Y2xzLl9fbW9kdWxlX199LntjbHMuX19xdWFsbmFtZV9ffSBvYmplY3Q+JwoKY2xhc3MgVHlwZSh0eXBlKToKICAgIGRlZiBfX25ld19fKG1ldGFjbHMsIG5hbWUsIGJhc2VzPU5vbmUsIG5hbWVzcGFjZT1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgaWYgYmFzZXMgaXMgTm9uZToKICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NfXy5fX2Jhc2VfXyhuYW1lKQogICAgICAgIGlmIGFsbChiYXNlLl9fcmVwcl9fIGlzIG9iamVjdC5fX3JlcHJfXyBmb3IgYmFzZSBpbiBiYXNlcyk6CiAgICAgICAgICAgIGlmIGJhc2VzIGFuZCBiYXNlc1stMV0gaXMgb2JqZWN0OgogICAgICAgICAgICAgICAgYmFzZXMgPSBiYXNlc1s6LTFdCiAgICAgICAgICAgIGJhc2VzICs9IE9iamVjdCwKICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKG1ldGFjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsICoqa3dhcmdzKQoKYnVpbHRpbnMudHlwZSA9IFR5cGUKYnVpbHRpbnMuX19idWlsZF9jbGFzc19fID0gcGFydGlhbChfX2J1aWxkX2NsYXNzX18sIG1ldGFjbGFzcz10eXBlKQoKZnJvbSBlbnVtIGltcG9ydCBFbnVtCgpjbGFzcyBBOgogICAgcGFzcwoKQiA9IHR5cGUoJ0InLCAoQSwpLCB7fSkKCmNsYXNzIEMoRW51bSk6CiAgICBjID0gQigpCgpwcmludChBKCkpCnByaW50KEIoKSkKcHJpbnQoQy5jLnZhbHVlKQ==