Hi,

I have a class A, containing embedded embedded classes, which need to access methods from A.
.
A highly contrived example, where I'm setting up an outer class in a Has-a relationship, containing a number of Actors. The inner class needs to access a method of the outer class; here the method get_name.

I don't really want to make Actor a sub-class (is-a; it isn't) of Monty; that would raise all sorts of other problems.

Can anyone please advise me on how to achieve this magic?

# define the outer class
class Monty:
  def __init__( self, names ):
    self.actors = []

    i = 0
    for n in names:
      self.actors.append( Actor( n, i ) )
      i += 1    # here is a case for python supporting post-increment!

  def count_actors( self ):
    return len( self.actors )

  def list_actors( self ):
    h=[]
    for n in self.actors:
      h.append( n.get_name() )
    return h

# define the inner class
class Actor:
  def __init__ ( self, name, id ):
    self.name = name
    self.id = id

  def get_name( self ):

    # and here lies the problem;
    # AttributeError: Actor instance has no attribute 'count_actors'
    # how do I access the method in the enclosing class
    txt = "I'm Actor {} Number {} of {}".\
             format(  self.name, self.id, self.count_actors() )

    # this works, of course
    #txt = "I'm Actor \"{}\"; Number {}.  ".\
                format( self.name, self.id )

    return txt

if __name__ == '__main__':
  o = Monty( ["Cleese", "Idle", "Palin" ] )
  print "number: ",o.count_actors()
  a = o.list_actors()
  for l in a:
    print l

Thanks, Tony
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to