Because why not.

This commit is contained in:
Julien Palard 2023-05-26 16:13:39 +02:00
parent cecadcf4bc
commit 263ae02153
Signed by: mdk
GPG Key ID: 0EFC1AC1006886F8
1 changed files with 36 additions and 0 deletions

View File

@ -0,0 +1,36 @@
def introspected_method(clsname, name, method):
def _(*args, **kwargs):
print(f"Calling {clsname}.{name}(*{args!r}, **{kwargs!r})...")
returning = method(*args, **kwargs)
print(f" returned {returning!r}")
return returning
return _
class Introspected(type):
def __new__(cls, name, bases, ns, **kwds):
for key, value in ns.items():
if isinstance(value, classmethod):
ns[key] = classmethod(introspected_method(name, key, value.__wrapped__))
elif callable(value) and key != "__repr__":
ns[key] = introspected_method(name, key, value)
return super().__new__(cls, name, bases, ns, **kwds)
class Metaclass(type, metaclass=Introspected):
@classmethod
def __prepare__(metacls, name, bases, **kwds):
return super().__prepare__(metacls, name, bases, **kwds)
def __new__(cls, name, bases, ns, **kwds):
return super().__new__(cls, name, bases, ns, **kwds)
def __init__(self, name, bases, ns, **kwds):
super().__init__(name, bases, ns, **kwds)
class Point(metaclass=Metaclass):
def __init__(self, x, y):
self.x = x
self.y = y