Newbie: Why doesn't this work
Tim Chase
python.list at tim.thechases.com
Mon Dec 31 12:39:01 EST 2007
A couple items of note:
> class Person:
This should be "class Person(object)" to take advantage of some
of the features that new-style classes offer...particularly in
this case.
> def __init__(self, fName="", lName=""):
> self.__fName = fName
> self.__lName = lName
>
> def __getattr__(self, attr):
> if attr == "name":
> return self.__fName + " " + self.__lName
>
> def __setattr__(self, attr, value):
> # this assumes that value is a tuple of first and last name
> if attr == "name":
> self.__fName, self.__lName = value
if the attr isn't "name", no default behavior gets called here.
The common way, with new-style classes is to add
else:
parent(Person, self).__setattr__(attr, value)
Do be aware that this has some odd behaviors when what you put in
and what you get out are different types:
>>> p1.name = ("Joe", "Smith")
>>> p2.name = p1.name
Traceback (most recent call last):
File "x.py", line 22, in ?
p2.name = P.name
File "x.py", line 13, in __setattr__
self.__fName, self.__lName = value
ValueError: too many values to unpack
(slightly munged traceback as it actually came from the test
input file rather than the interactive prompt)
-tim
More information about the Python-list
mailing list