Hi Python Community: Despite my new-ness to Python I have alreadhy been able to do some (I think) amazing things. It is a truly elegant and smart language.
Yet, I can not seem to get a handle on something simple. I would like to make a class which has private varaiables fName and lName. It should have a property "name" which can get or set a name. Something like as follows: class Person: 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 P = Person() P.name = ("Joe", "Smith") print P.name This fails with the following note: >>> Traceback (most recent call last): File "C:\Python\testObject.py", line 20, in <module> print P.name File "C:\Python\testObject.py", line 8, in __getattr__ return self.__fName + " " + self.__lName TypeError: unsupported operand type(s) for +: 'NoneType' and 'str' I don't understand why this fails. I thought perhaps I need to make the __getattr__ function like this def __getattr__(self, attr): if attr == "name": return self.__fName + " " + self.__lName elif attr == "__fName": return self.__fName elif attr == "__lName": return self.__lName But that still fails. Can someone please tell me what I am doing wrong? Thansk in advance, Chris ([EMAIL PROTECTED]) -- http://mail.python.org/mailman/listinfo/python-list