How to validate the __init__ parameters

Lie Ryan lie.1296 at gmail.com
Mon Dec 21 17:12:39 EST 2009


On 12/22/2009 4:41 AM, Denis Doria wrote:
> Hi;
>
> I'm checking the best way to validate attributes inside a class. Of
> course I can use property to check it, but I really want to do it
> inside the __init__:
>
> class A:
>      def __init__(self, foo, bar):
>          self.foo = foo #check if foo is correct
>          self.bar = bar
>

A nice sugar to do that:

import functools

class CheckError(Exception): pass

def func_check(*argcheckers):
     def _checked(func):
         def _function(*args):
             res = [(check(arg), check, arg) for check, arg in 
zip(argcheckers, args)]
             if all(r[0] for r in res):
                 return func(*args)
             else:
                 raise CheckError(filter(lambda x: x[0] == False, res))
         return _function
     return _checked

method_check = functools.partial(func_check, lambda a: True)

##########################################################
def check_foo(arg):
     return 5 <= arg <= 10

def check_bar(arg):
     return 10 <= arg < 20

class A(object):
     @method_check(check_foo, check_bar)
     def __init__(self, foo, bar):
         self.foo = foo
         self.bar = bar



More information about the Python-list mailing list