On 12/7/2015 1:10 PM, Tony van der Hoff wrote:
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!

This is actually a case for using enumerate:
  for i, name in enumerate(names):


   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

return list(self.actors)  # or perhaps even faster
return self.actors[:]

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

Tkinter, and I presume tk, works by creating circular references.
widgets get a reference to a master widget, and container get a reference to widgets that are placed (or packed or gridded) therein. Widgets have an explicit .destroy method (inherited from tcl/tk) to undo the circularity. It works, but it is not completely without problems.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to