> Behalf Of Manuel Bleichner
> In a module I have a huge number of classes of the form:
> 
> class A(object):
>    connected_to = [B, C]
>    <other attributes...>
> 
> class B(object)
>    connected_to = [C]
>    <other attributes...>
> 
> class C(object)
>    connected_to = [A]
>    <other attributes...>
> 
> As you see, classes A and B reference classes that are not 
> yet defined when the class is being defined.
> It will raise a NameError: 'B'.

How about a connection broker?

Simple example:

#############################
connections = {}

def Register( obj ):
        try:
                connections[obj.name]['obj'] = obj
        except KeyError:
                connections[obj.name] = { 'obj' : obj, 'connected_to' : [] }

def ConnectTo( objname, obj ):
        try:
                connections[objname]['connected_to'].append( obj )
        except KeyError:
                connections[objname] = { 'obj' : None, 'connected_to' :
[obj] }

class ConnectionObject:
        def __str__(self):
                return self.name

class A(ConnectionObject):
    def __init__(self):
        self.name = 'A'
        Register( self )
        ConnectTo( 'B', self )


class B(ConnectionObject):
    def __init__(self):
        self.name = 'B'
        Register( self )
        ConnectTo( 'A', self )
        ConnectTo( 'C', self )


class C(ConnectionObject):
    def __init__(self):
        self.name = 'C'
        Register( self )
        ConnectTo( 'A', self )


a = A()
b = B()
c = C()


for (key, val) in connections.iteritems():
    print 'object: %s (%s)' % ( key, val['obj'] )
    str_vals = []
    for obj in val['connected_to']:
        str_vals.append( str( obj ) )
    print '\tconnections from:', str_vals

#############################
Output:

object: A (A)
        connections from: ['B', 'C']
object: C (C)
        connections from: ['B']
object: B (B)
        connections from: ['A']
object: D (None)
        connections from: ['C']

Regards,
Ryan Ginstrom

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

Reply via email to