staticmethod and namespaces

Diez B. Roggisch deets at nospam.web.de
Fri Feb 26 10:15:47 CET 2010


Am 26.02.10 06:07, schrieb darnzen:
> Having an odd problem that I solved, but wondering if its the best
> solution (seems like a bit of a hack).
>
> First off, I'm using an external DLL that requires static callbacks,
> but because of this, I'm losing instance info. It could be import
> related? It will make more sense after I diagram it:
>
> #Module main.py
> from A import *
>
> class App:
>      def sperg(self):
>           self.a = A()
>
> app = App()
> [main loop and such]
>   -----------------------------
> # Module A.py
> import main
> class Foo:
>        Selves=[]
>       def __init__(self):
>                 Foo.Selves.append(self)
>       @staticmethod
>       def chum_callback(nType, nP):
>                 # Need to access function / data in app instance
>                 app.sperg(nP)
>                 # Need to access func data in Foo
>                 # I'm pulling 'self' ouf of list made in constructor
>                 self = Foo.getSelf(nP)
>
>       def getSelf(nP):
>                 return self.Selves[nP]
>
> ---------------------------------------------------------------------
> So basically I added a list of instances to the base class so I can
> get at them from the staticmethod.
> What's bothering me the most is I can't use the global app instance in
> the A.py module.
>
> How can I get at the app instance (currently I'm storing that along
> with the class instance in the constructor)?
> Is there another way to do this that's not such a hack?
>
> Sorry for the double / partial post :(

Can you show how you pass the staticmethod to the C-function? Is the DLL 
utilized by ctypes?

I don't see any reason you couldn't use a bound method, which would give 
you your self, instead relying on global state.

Diez



More information about the Python-list mailing list