George Sakkis wrote: > That's a typical case for using an OO approach; just make a class for > each validator and have a single polymorphic validate method (I would > make validators __call__able instead of naming the method 'validate'): > > # Abstract Validator class; not strictly necessary but good for > documentation > class Validator(object): > def __call__(self,field,value): > '''Validate a value for this field. > Return a string representation of value on success, or None on > failure. > ''' > raise NotImplementedError("Abstract method") > > > class DecimalValidator(Validator): > def __call__(self,name,value): > '''Test whether numeric value is a decimal.'''
Why is this better than an isDecimal function? def isDecimal(name, value): ''' Test whether numeric value is a decimal.''' seems simpler and more straightforward to me. > def validateField(name, value, validators): > """ Validates field input """ > results = {} > for validate in validators: > result = validate(name,value) > if result is not None: > results[name] = result > # XXX: if more than one validators succeed, > # all but the last result will be overwritten > return results No change needed in the loop above... > > # test > validators = [DecimalValidator(), ZipCodeValidator()] validators = [ isDecimal, isZipCode ] Kent -- http://mail.python.org/mailman/listinfo/python-list