fork download
  1. import sys
  2.  
  3.  
  4. def attribute(name, type=None, default=None, ro=False):
  5. @property
  6. def fn(self):
  7. return getattr(self, '_' + name, default)
  8.  
  9. if not ro:
  10. @fn.setter
  11. def fn(self, value):
  12. if type is not None and not isinstance(value, type):
  13. raise TypeError
  14. setattr(self, '_' + name, value)
  15.  
  16. sys._getframe(1).f_locals[name] = fn
  17.  
  18.  
  19. class Doge:
  20. attribute('such_var', int, 10)
  21. attribute('much_data', str)
  22.  
  23.  
  24. d = Doge()
  25. print(d.such_var, d.much_data)
  26. d.such_var = 12
  27. d.much_data = 'very test'
  28. print(d.such_var, d.much_data)
  29. d.such_var = 'omg error'
Runtime error #stdin #stdout #stderr 0.1s 10104KB
stdin
Standard input is empty
stdout
10 None
12 very test
stderr
Traceback (most recent call last):
  File "./prog.py", line 29, in <module>
  File "./prog.py", line 13, in fn
TypeError