Manuel Graune wrote: > as an example of what I would like to achieve, think of a street > where each house has a door and a sign with a unique (per house) > number on it. I tried to model this like this: > > class House(object): > class Door(object): > def __init__(self,color): > self.color=color > class Sign(object): > def __init__(self,text): > self.text=text > def __init__(self, doorcolor,housenumber): > self.housenumber=housenumber > self.door=House.Door(doorcolor) > self.sign=House.Sign(housenumber) > > house1=House("red","1") > house2=House("blue","2") > > Well, so far, so good. Now, what I'd like to achive is that the text of > the "sign" changes whenever the variable "housenumber" of the > "parent-instance" changes or that > "house1.sign.text" is a reference/pointer to "house1.housenumber"
Python doesn't support C-style pointers, but you can work around it to some degree: >>> class House(object): ... def __init__(self, housenumber): ... self.housenumber = housenumber ... self.sign = Sign(self) ... >>> class Sign(object): ... def __init__(self, house): ... self.house = house ... @property ... def text(self): return self.house.housenumber ... >>> house = House(42) >>> house.sign.text 42 >>> house.housenumber = "42b" >>> house.sign.text '42b' If you are concerned about the tight coupling between House and Sign you can modify Sign to accept a function that gets the housenumber: >>> class House(object): ... def __init__(self, n): self.housenumber = n ... >>> class Sign(object): ... def __init__(self, gettext): ... self._gettext = gettext ... @property ... def text(self): return self._gettext() ... >>> house = House(7) >>> house.sign = Sign(lambda house=house: house.housenumber) >>> house.sign.text 7 Peter -- http://mail.python.org/mailman/listinfo/python-list