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 > > All examples that I saw with property didn't show a way to do it in > the __init__. Just to clarify, I don't want to check if the parameter > is an int, or something like that, I want to know if the parameter do > not use more than X chars; and want to do it when I'm 'creating' the > instance; not after the creation: > > a = A('foo', 'bar') > > not > > class A: > def __init__(self, foo = None, bar = None): > self._foo = foo > self._bar = bar > def set_foo(self, foo): > if len(foo) > 5: > raise <something> > _foo = foo > foo = property(setter = set_foo) > > a = A() > a.foo = 'foo' > > > I thought in something like: > > class A: > def __init__(self, foo = None, bar = None): > set_foo(foo) > self._bar = bar > def set_foo(self, foo): > if len(foo) > 5: > raise <something> > _foo = foo > foo = property(setter = set_foo) > > But looks too much like java
I use assertions myself e.g. >>> foo = "123456" >>> assert len(foo) <= 5 Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError Dunno if this would be considered good or bad programming practice by those more experienced than I (comment always welcome!) but it works for me :) Roger. -- http://mail.python.org/mailman/listinfo/python-list