fork download
  1. class Samplable:
  2. def __init__(self, method):
  3. self.method = method
  4.  
  5. def __call__(self, *args, **kwargs):
  6. return self.method(*args, **kwargs)
  7.  
  8. def sample(self, *args, **kwargs):
  9. return f'sampled {self(*args, **kwargs)}'
  10.  
  11. class sample:
  12. def __init__(self, func):
  13. self.func = func
  14.  
  15. def __get__(self, obj, objtype=None):
  16. return Samplable(self.func.__get__(obj))
  17.  
  18. class Bar:
  19. def __init__(self, data):
  20. self.data = data
  21.  
  22. @sample
  23. def mean(self):
  24. return f'mean {self.data}'
  25.  
  26. @sample
  27. def sd(self):
  28. return f'sd {self.data}'
  29.  
  30. bar = Bar('data')
  31. print(bar.mean())
  32. print(bar.mean.sample())
  33. print(bar.sd())
  34. print(bar.sd.sample())
Success #stdin #stdout 0.07s 14108KB
stdin
Standard input is empty
stdout
mean data
sampled mean data
sd data
sampled sd data