Procedural API inside class--scoping questions

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Mon Jan 11 12:05:43 EST 2010


Kevin Walzer a écrit :
> I'm trying to make use of a Python library, aemreceive, that provides a 
> procedural API. (aemreceive is a library for Python on the Mac that 
> allows the application to receive and respond to Apple Events.)
> 
> My Python apps basically run in a single fooApp class, and everything 
> runs inside the class. To launch the app (my apps are Tkinter-based), I 
> use something like this:
> 
> if __name__== '__main__':
>     app = fooApp(None)
>     app.mainloop()
> 
> In keeping with aemreceive's procedural API, I've added a runCommand 
> function inside the app class to provide some basic functionality in 
> response to Apple Events it will set some objects/variables, then 
> display the output in the app. In my code it looks like this:
> 
>     def runCommand(string):
>         self.searchterm=string
>         self.servertree.selection_set('Default')
>         self.getInfo()
> 
> When I test this command, I get an error from Python: "self" is not 
> defined.

Indeed.

> I think I understand what is going here. All of the other functions in 
> the fooApp class take "self" as a parameter, i.e. they are components of 
> the class.

It actually works the other way round : it's because they are 
"components" (we prefer to say "attributes") of the class that they take 
the current instance as first param. FWIW, the following syntaxes are 
functionnaly equivalent:

   obj = MyClass()
   obj.some_method()
   MyClass.some_method(obj)
   # if some_method is not inherited:
   MyClass.__dict__['some_method'](obj)


Anyway:

> runCommand is not, so therefore "self" is undefined. My 
> question is, how can I get the values from the class (self.searchterm,

s/class/instance/ here.


> et.al) inside the runCommand function?

The usual way - adds the relevant param:

     def runCommand(self, string):
         self.searchterm=string
         self.servertree.selection_set('Default')
         self.getInfo()


The problem is that you don't provide much information about how this 
function is actually called.




More information about the Python-list mailing list