Mercurial > hg > config
changeset 188:5b82653ccda3
add demonstration of abc error
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Wed, 28 Dec 2011 15:23:01 -0800 |
parents | 8e43a4f50e78 |
children | fe8befc5bdfc |
files | python/abstract.py |
diffstat | 1 files changed, 38 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/abstract.py Wed Dec 28 15:23:01 2011 -0800 @@ -0,0 +1,38 @@ + +def abstractmethod(method): + line = method.func_code.co_firstlineno + filename = method.func_code.co_filename + def not_implemented(*args, **kwargs): + raise NotImplementedError('Abstract method %s at File "%s", line %s should be implemented by a concrete class' % (repr(method), filename, line)) + return not_implemented + +class AbstractBaseClass(object): + + @abstractmethod + def foo(self, arg): + """foo does such and such""" + + @abstractmethod + def bar(self): + """bar does something else""" + +class ConcreteClass(AbstractBaseClass): + + def foo(self, arg): + print 'hello' + +if __name__ == '__main__': + c = ConcreteClass() + c.foo(1) + a = AbstractBaseClass() + try: + a.foo(1) + except NotImplementedError, e: + print e + try: + a.bar() + except NotImplementedError, e: + print e + a.foo(1) + +