Mercurial > hg > config
diff python/example/abstract.py @ 525:37f8bc525888
-> example
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Tue, 24 Sep 2013 12:32:50 -0700 |
parents | python/abstract.py@fe8befc5bdfc |
children | 9149b35b8a2a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/example/abstract.py Tue Sep 24 12:32:50 2013 -0700 @@ -0,0 +1,39 @@ + +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 + c.foo(1) + a.foo(1) + +