Metaclass
Publish date: Jul 28, 2023
Last updated: Nov 7, 2024
Last updated: Nov 7, 2024
class Meta(type): @classmethod def prepare(mcs, name, bases, **kwargs): print(’ Meta.prepare(mcs=%s, name=%r, bases=%s, **%s)’ % (mcs, name, bases, kwargs)) return {}
def __new__(mcs, name, bases, attrs, **kwargs):
print(' Meta.__new__(mcs=%s, name=%r, bases=%s, attrs=[%s], **%s)' % (mcs, name, bases, ','.join(attrs), kwargs))
return super().__new__(mcs, name, bases, attrs)
def __init__(cls, name, bases, attrs, **kwargs):
print(' Meta.__init__(cls=%s, name=%r, bases=%s, attrs=[%s], **%s)' % (cls, name, bases, ', '.join(attrs), kwargs))
return super().__init__(name, bases, attrs)
def __call__(cls, *args, **kwargs):
print(' Meta.__call__(cls=%s, args=%s, kwargs=%s)' % (cls, args, kwargs))
return super().__call__(*args, **kwargs)
class Class(metaclass=Meta, extra=1): def new(cls, myarg): print(’ Class.new(cls=%s, myarg=%s)’ % (cls, myarg)) return super().new(cls)
def __init__(self, myarg):
print(' Class.__init__(self=%s, myarg=%s)' % (self, myarg))
self.myarg = myarg
return super().__init__()
def __str__(self):
return "<instance of Class; myargs=%s>" % (getattr(self, 'myarg', 'MISSING'),)
print("==============") print(Class(1))
Disqus comments are disabled.