m
Size: a a a
m
ИС
BO
m
m
СС
M
MK
СС
from functools import wraps
import random
def decorator(version):
def deco_wrapper(f):
@wraps(f)
def wrapper(self, *args, **kwargs):
print(f.__name__ + f' {version} ' + (self.var if hasattr(self, 'var') else ''))
return f(self, *args, **kwargs)
return wrapper
return deco_wrapper
deco = decorator(version=1111111)
class MetaRandom(type):
def __new__(mcs, name, bases, attrs):
for k, v in list(attrs.items()):
if callable(v):
attrs[k] = deco(attrs[k])
for base in bases:
for k, v in base.__dict__.items():
if callable(v) and not v.__name__.startswith('__'):
attrs[k] = deco(v)
return type.__new__(mcs, name, bases, attrs)
class MyRandom(random.Random, metaclass=MetaRandom):
def __init__(self, x=None):
super(MyRandom, self).__init__(x)
self.var = 'BLABLABLA'
my_random = MyRandom()
my_random.randint(1, 10)
СС
__init__ 1111111
seed 1111111
randint 1111111 BLABLABLA
randrange 1111111 BLABLABLA
_randbelow_with_getrandbits 1111111 BLABLABLA
m
AG
AG
M