fork download
  1. import functools
  2. import inspect
  3.  
  4. class OverrideException(Exception):
  5. pass
  6.  
  7. def override(method):
  8. def wrapper(self,*args,**kwargs):
  9. base = inspect.getmro(type(self))[1]
  10. if not hasattr(base, method.__name__):
  11. raise OverrideException('Base class "{0}" do not have method "{1}"'.format(base.__name__,method.__name__))
  12. return method(self,*args,**kwargs)
  13. return wrapper
  14.  
  15.  
  16. class Base:
  17. def __init__(self):
  18. pass
  19.  
  20. # virtual
  21. def test(self):
  22. print("Base.test()")
  23.  
  24.  
  25. class Derived(Base):
  26. def __init__(self):
  27. super().__init__()
  28.  
  29. @override
  30. def test(self):
  31. print("Derived.test()")
  32.  
  33. @override
  34. def test2(self):
  35. print("Derived.test2()")
  36.  
  37.  
  38. def main():
  39. d = Derived()
  40. d.test()
  41. d.test2()
  42.  
  43.  
  44. if __name__=='__main__':
  45. try:
  46. main()
  47. except Exception as e:
  48. print(e)
  49.  
Success #stdin #stdout 0.02s 10100KB
stdin
Standard input is empty
stdout
Derived.test()
Base class "Base" do not have method "test2"