Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Tony van der Hoff Newsgroups: comp.lang.python Subject: Accessing container's methods Date: Mon, 7 Dec 2015 18:10:10 +0000 Lines: 61 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net PxV0aFi9cwzyxRxGnTmHNw6mnf+NMtp/W9Do9kvMTSdjwUGOlw Cancel-Lock: sha1:7QYDgrjkcfm6KQG1FD7zfYXHuo4= X-Mozilla-News-Host: news://news.individual.net:119 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.4.0 Xref: csiph.com comp.lang.python:100096 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