Accessing container's methods

Tony van der Hoff tony at vanderhoff.org
Mon Dec 7 13:10:10 EST 2015


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


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /