fork download
  1. import types
  2.  
  3.  
  4. class TestClass:
  5. def __init__(self):
  6. self.name = None
  7.  
  8. def __getattribute__(self, attr):
  9. method = object.__getattribute__(self, attr)
  10. if not method:
  11. raise Exception("Attribute %s not implemented" % attr)
  12. if type(method) == types.MethodType:
  13. self.run()
  14. return method
  15.  
  16. def run(self):
  17. if self.name is None:
  18. raise Exception("'name' attribute is 'None'")
  19.  
  20. def __call__(self):
  21. self.run()
  22. return self
  23.  
  24.  
  25. def UsesTestClass(testClass):
  26. print(testClass.name)
  27.  
  28.  
  29. testClass = TestClass()
  30. testClass.name = "Hello"
  31. testClass.run()
Runtime error #stdin #stdout #stderr 0.02s 28200KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 31, in <module>
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 13, in __getattribute__
  File "./prog.py", line 9, in __getattribute__
RecursionError: maximum recursion depth exceeded while calling a Python object