Mercurial > hg > config
comparison python/abstract.py @ 188:5b82653ccda3
add demonstration of abc error
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Wed, 28 Dec 2011 15:23:01 -0800 |
| parents | |
| children | fe8befc5bdfc |
comparison
equal
deleted
inserted
replaced
| 187:8e43a4f50e78 | 188:5b82653ccda3 |
|---|---|
| 1 | |
| 2 def abstractmethod(method): | |
| 3 line = method.func_code.co_firstlineno | |
| 4 filename = method.func_code.co_filename | |
| 5 def not_implemented(*args, **kwargs): | |
| 6 raise NotImplementedError('Abstract method %s at File "%s", line %s should be implemented by a concrete class' % (repr(method), filename, line)) | |
| 7 return not_implemented | |
| 8 | |
| 9 class AbstractBaseClass(object): | |
| 10 | |
| 11 @abstractmethod | |
| 12 def foo(self, arg): | |
| 13 """foo does such and such""" | |
| 14 | |
| 15 @abstractmethod | |
| 16 def bar(self): | |
| 17 """bar does something else""" | |
| 18 | |
| 19 class ConcreteClass(AbstractBaseClass): | |
| 20 | |
| 21 def foo(self, arg): | |
| 22 print 'hello' | |
| 23 | |
| 24 if __name__ == '__main__': | |
| 25 c = ConcreteClass() | |
| 26 c.foo(1) | |
| 27 a = AbstractBaseClass() | |
| 28 try: | |
| 29 a.foo(1) | |
| 30 except NotImplementedError, e: | |
| 31 print e | |
| 32 try: | |
| 33 a.bar() | |
| 34 except NotImplementedError, e: | |
| 35 print e | |
| 36 a.foo(1) | |
| 37 | |
| 38 |
