Mercurial > hg > config
annotate python/abstract.py @ 438:364ddd44fd82
all the parts are there; now just to assemble it
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Thu, 08 Aug 2013 17:00:47 -0700 |
parents | fe8befc5bdfc |
children |
rev | line source |
---|---|
188
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
1 |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
2 def abstractmethod(method): |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
3 line = method.func_code.co_firstlineno |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
4 filename = method.func_code.co_filename |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
5 def not_implemented(*args, **kwargs): |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
6 raise NotImplementedError('Abstract method %s at File "%s", line %s should be implemented by a concrete class' % (repr(method), filename, line)) |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
7 return not_implemented |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
8 |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
9 class AbstractBaseClass(object): |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
10 |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
11 @abstractmethod |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
12 def foo(self, arg): |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
13 """foo does such and such""" |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
14 |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
15 @abstractmethod |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
16 def bar(self): |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
17 """bar does something else""" |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
18 |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
19 class ConcreteClass(AbstractBaseClass): |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
20 |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
21 def foo(self, arg): |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
22 print 'hello' |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
23 |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
24 if __name__ == '__main__': |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
25 c = ConcreteClass() |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
26 c.foo(1) |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
27 a = AbstractBaseClass() |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
28 try: |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
29 a.foo(1) |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
30 except NotImplementedError, e: |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
31 print e |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
32 try: |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
33 a.bar() |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
34 except NotImplementedError, e: |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
35 print e |
189
fe8befc5bdfc
add another print just for fun
Jeff Hammel <jhammel@mozilla.com>
parents:
188
diff
changeset
|
36 c.foo(1) |
188
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
37 a.foo(1) |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
38 |
5b82653ccda3
add demonstration of abc error
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
39 |