Items inheriting attributes from its container?

Kreso kkumerNOTTHIS at thatfamoussearchenginesmail.com
Sun Aug 23 00:49:22 CEST 2009


I would like to create a list-like container class so that, additionally
to usual list methods, I could attach attributes to the container instances.
However, I would like it so that the items contained in the particular
instance of container somehow 'inherit' those attributes i.e.

cont = Container()
cont.color = 'blue'
cont.append(item)
print item.color
'blue'

The example appended below does that, but with the restriction that container
attributes must be set in the instantiation phase. This is actually fine
for me at the moment because my objects are "read only", but I would
like to hear about better solutions, with more flexibility, please.


#-----8<----------------------------
class Player:
    """Class for items"""

    def __init__(self, playerdata, team):
        self.data = playerdata
        for key in team.__dict__:
            setattr(self, key, team.__dict__[key])
        return


class Team(list):
    """Class for containers"""
    
    def __init__(self, teamdata, playerdata):
        for key in teamdata:
            setattr(self, key, teamdata[key])
        for item in playerdata:
            self.append(Player(item, self))
        return
            

lakersdata = {'name' : 'Lakers', 'kitcolor' : 'yellow'}
lakersplayers = [['Kobe', 'PG', 12, 123], ['Kareem', 'FW', 23, 345]]

lakers = Team(lakersdata, lakersplayers)

# This is fine:
p1 = lakers[1]
print p1.kitcolor

# However the following doesn't work:
lakers.kitcolor = 'blue'
print p1.kitcolor

#-----8<----------------------------



More information about the Python-list mailing list