madpython a écrit : > I've been doing an application with Tkinter widgets. Nothing really > fancy just routine stuff. Though I have no problems with it by now I > guess it would be reasonable to ask about a thing that's been bothering > me a bit. Look at this piece of code: > > class A(object): > def a(self): > return "a from A" > > class B(object): > def interClassCall(self): > print globals()['c'].__dict__['a'].a()
Yuck. You're fired. > class C(object): > def __init__(self): > self.a=A() > self.b=B() > def c(self): > self.b.interClassCall() > > if __name__=="__main__": > c=C() > c.c() > > What is another way to get data from method of another instance of a > class? Have a reference to that instance. Usually by one of the following method: 1/ create the C instance in the calling method 2/ have the C instance passed as an argument to the calling method 3/ have the C instance as an attribute of the B instance 4/ get the C instance from a module function (but then you have to solve how this module function itself gets the C instance, see above) In your case, since it's the C instance that calls the B method that needs a reference to the C instance, just have the C instance pass itself to B: class B(object): def interClassCall(self, c): print c.a.a() class C(object): def __init__(self): self.a=A() self.b=B() def c(self): self.b.interClassCall(self) Now, since B.interClassCall() doesn't need c, but the result of the call to c.a.a(), it would be better to directly pass that result: class B(object): def interClassCall(self, something): print something class C(object): def __init__(self): self.a=A() self.b=B() def c(self): self.b.interClassCall(self.a.a()) > Or maybe print globals()['c'].__dict__['a'].a() is perfectly > normal. Definitively not. Not only is it a very complicated way to write a simple thing, but it's also totally defeating the whole point of using objects. > I need your professional expertise. It doesn't require any professional expertise to see what's wrong with your code. It's CS101. -- http://mail.python.org/mailman/listinfo/python-list