Can a child access parent attributes if that child added post-hoc as an attribute to the parent?

Bitswapper bithead0101 at gmail.com
Thu Aug 22 18:00:38 EDT 2013


On Thursday, August 22, 2013 4:26:24 PM UTC-5, Prasad, Ramit wrote:
> Bitswapper wrote:
> 
> >
> 
> > So I have a parent and child class:
> 
> >
> 
> >
> 
> > class Map(object):
> 
> >     def __init__(self, name=''):
> 
> >         self.mapName = name
> 
> >         self.rules = {}
> 
> >
> 
> > class Rule(Map):
> 
> >     def __init__(self, number):
> 
> >         Map.__init__(self)
> 
> >         self.number = number
> 
> 
> 
> This means that rules will never have a name. I think you need
> 
>       def __init__(self, name='', number=None):
> 
>           Map.__init__(self, name)
> 
>           self.number = number
> 
> >
> 
> >     def __repr__(self):
> 
> >         return "Map " + self.mapName + " rule number " + str(self.number)
> 
> >
> 
> > if __name__ == "__main__":
> 
> >   map = Map("thismap")
> 
> >   rule = Rule(1)
> 
> >   map.rules[rule.number] = rule
> 
> >
> 
> >
> 
> >
> 
> > with the above:
> 
> > $ python -i inherit.py
> 
> > >>> map
> 
> > <__main__.Map object at 0xb7e889ec>
> 
> > >>> map.rules
> 
> > {1: Map  rule number 1}
> 
> > >>> map.rules[1]
> 
> > Map  rule number 1
> 
> > >>>
> 
> >
> 
> >
> 
> > I have tried adding:
> 
> >   map.rules[2] = Rule(2)
> 
> >
> 
> > but that still gets:
> 
> >
> 
> > $ python -i inherit.py
> 
> > >>> map.rules
> 
> > {1: Map  rule number 1, 2: Map  rule number 2}
> 
> > >>>
> 
> >
> 
> > and:
> 
> > map.rule = Rule(3)
> 
> >
> 
> > which also doesn't really get me what I'm looking for:
> 
> >
> 
> > >>> map.rules
> 
> > {1: Map  rule number 1, 2: Map  rule number 2}
> 
> > >>> map.rule
> 
> > Map  rule number 3
> 
> > >>>
> 
> >
> 
> >
> 
> > It seems to me what I'm trying to do is link an arbitrary child instance to an arbitrary instance of a
> 
> > parent class, which in this case would be handy  Because I'd like to populate a map with rules and
> 
> > print the rules including the parent map name for each rule.  I'm just not sure how I would go about
> 
> > doing this in python.
> 
> >
> 
> > Any thoughts are welcome, and thanks in advance
> 
> 
> 
> I not sure what you mean by the above. Can you provide an example of what you want to occur and the output for it?
> 

I was thinking of:

map = Map('myMap')
map.rules[1] = Rule[1]
map.rules[2] = Rule[2]

>>> print map.rules[1]
>>> Map myMap rule number 1
>>> print map.rules[2]
>>> Map myMap rule number 2
>>>
>>> map.mapName = "newname"
>>> print map.rules[1]
>>> Map newname rule number 1
>>> print map.rules[2]
>>> Map newname rule number 2



More information about the Python-list mailing list