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

Bitswapper bithead0101 at gmail.com
Fri Aug 23 15:39:58 EDT 2013


On Thursday, August 22, 2013 4:59:17 PM UTC-5, Ian wrote:
> On Thu, Aug 22, 2013 at 3:26 PM, 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
> 
> 
> 
> No, that's still wrong.  The OP talks abut maps having names, not
> 
> rules having names.  Unless a Rule is-a Map, which sounds unlikely,
> 
> Rule should not be inheriting from Map in the first place.
> 
> 
> 
> >> 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.
> 
> 
> 
> You'll need to keep a reference to the Map on each Rule instance.  So
> 
> instead of self.mapName you'll have self.map.mapName.  Your Rule class
> 
> should probably look something like this:
> 
> 
> 
> class Rule(object):
> 
>     def __init__(self, map, number):
> 
>         self.map = map
> 
>         self.number = number
> 
> 
> 
> And then when you construct it you'll need to tell it what map it belongs to:
> 
> 
> 
>     rule = Rule(map, 1)


Actually yea, that makes sense.  I was looking for a way for a child to 'automagically' inherit parent instance-specific data via inheritance only by virtue of being a child of a parent instance.  What you're suggesting makes more sense.

Thanks!



More information about the Python-list mailing list