Johannes Bauer wrote: > Now I want A to call some private methods of B and vice versa (i.e. what > C++ "friends" are), but I want to make it hard for the user to call > these private methods. > > Currently my ugly approach is this: I delare the internal methods > private (hide from user). Then I have a function which gives me a > dictionary of callbacks to the private functions of the other objects. > This is in my opinion pretty ugly (but it works and does what I want). > > I'm pretty damn sure there's a nicer (prettier) solution out there, but > I can't currently think of it. Do you have any hints?
Maybe you can wrap A into a class that delegates to A: >>> class A(object): ... def __private(self): print "private A" ... >>> class Friend(object): ... def __init__(self, obj): ... self.__obj = obj ... self.__prefix = "_%s_" % obj.__class__.__name__ ... def __getattr__(self, name): ... return getattr(self.__obj, self.__prefix + name) ... >>> a = A() >>> a._A__private() # hard private A >>> f = Friend(a) >>> f._private() # easy private A The B instance would refer to A via the Friend instance. -- http://mail.python.org/mailman/listinfo/python-list