Over my head with descriptors
Tim Roberts
timr at probo.com
Sat Dec 16 02:42:37 EST 2006
"Sarcastic Zombie" <sarcasticzombie at gmail.com> wrote:
>
>Code included below.
>
>Basically, I've created a series of "question" descriptors, which each
>hold a managed value. This is so I can implement validation, and render
>each field into html automatically for forms.
>
>My problem is this: every instance of my "wizard" class has unique self
>values, but they share the exact same descriptor values.
>
>...
>class Test(Wizard):
> grouping = [
> [ 'age', 'weight' ],
> [ 'feet', 'inches' ],
> ['name', 'cash', 'fav_color', 'happy', 'birthday'] ]
>
> def __new__(self):
> age = Q_Integer("Your Age:", "age", 99)
> weight = Q_Integer("Your Weight:", "weight", 200)
> feet = Q_Integer("Feet tall:", "feet", 6)
> inches = Q_Integer("Inches Tall:", "inches", 0)
> name = Q_Chars("Your Name:", "name", max_length=15, required=True)
> cash = Q_Float("Money in hand?", "cash", required=True,
>default=55.50)
> fav_color = Q_Chars("Your favorite color?", "fav_color",
>required=True, max_length=50, choices=C_CHOICES)
> homezip = Q_Zip("Your zip code?", "homezip", required=True, )
> happy = Q_Bool("Are you happy?", "happy", default=False)
> birthday = Q_Date("Your Birthday:", "birthday")
The __new__ method is called with the CLASS as its first argument, not the
new instance. __new__ is supposed to RETURN the new instance. So, when
you set "age", you are setting a CLASS attribute that will be shared by all
instances.
Is there a reason you don't just use __init__ instead of __new__, and use
"self.age" and "self.weight" and so on?
--
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.
More information about the Python-list
mailing list