write a recognizer
Peter Otten
__peter__ at web.de
Thu Feb 12 04:55:35 EST 2004
Klaus Neuner wrote:
> Hello,
>
> I want to write a class Recognizer, like so:
>
> class Recognizer(object):
>
> def is_of_category_1(self, token):
> if token == 1:
> return "1"
> else:
> return False
>
> def is_of_category_2(self, token):
> if token == 2:
> return "2"
> else:
> return False
>
> def recognize(self, token):
> for fun in <?>:
> result = apply(fun, token)
> if result:
> return result
> return False
>
> What do I have to write instead of <?>?
> Or: How should I design the recognizer, if the above design is not good?
>
> Klaus
The following assumes that all category checker method names start with a
common prefix. Those are automatically extracted in the __init__() method.
If you are interested in this technique, I stole it from cmd.py in the
library. IIRC, the implementation is more complete as it also inspects the
base classes.
class Recognizer(object):
def __init__(self):
r = self.recognizers = []
for n in dir(self.__class__):
if n.startswith("is_"):
r.append(getattr(self, n))
def is_of_category_1(self, token):
if token == 1:
return "1"
def is_of_category_2(self, token):
if token == 2:
return "2"
def recognize(self, token):
# would also work:
#for fun in [self.is_of_category_1, self.is_of_category_2]:
for fun in self.recognizers:
result = fun(token)
if result:
return result
return False
if __name__ == "__main__":
r = Recognizer()
for t in "12341":
print r.recognize(int(t)),
print
Peter
More information about the Python-list
mailing list