'self' an unknown variable???

Rony rony.steelandt at bucodi.com
Thu Jan 17 11:15:11 EST 2002


Isn't this nicer ? just wondering??
 def write(self, filename, matr, cols=-None, format='asc'):
     if not (cols):
          cols = self.Npred
          blablabla
     return res




Giorgi Lekishvili <gleki at gol.ge> wrote in message news:<3C438A2C.B249AE1A at gol.ge>...
> yes, you're right. I have done it as follows:
> def write(self, filename, cols='all', format='asc'):
>     if cols=='all' or cols>self.Npred:
>         cols=self.Npred
> 
> Just the way you've written.
> 
> Grtz,
> Giorgi
> 
> Robin Munn wrote:
> 
> > On Mon, 14 Jan 2002 10:40:22 -0800, Giorgi Lekishvili <gleki at gol.ge> wrote:
> > >Hello all!
> > >
> > >I have written a class, with the function write. The latter is defined
> > >as follows:
> > >
> > >def write(self, filename, matr, cols=self.Npred, format='asc'):
> > >    blablabla
> > >    return res
> > >
> > >This doesn't work. Then I changed cols=N, previously defined
> > >N=self.Npred.
> > >Now things ar ok.
> > >
> > >Why doesn't function self.some_attr in the function declaration?
> >
> > As Alex mentioned, the name "self" is not bound to anything at the time
> > the def statement executes. The standard way to do what you're trying to
> > do looks like:
> >
> > def write(self, filename, matr, cols=None, format='asc'):
> >     if cols == None:
> >         cols = self.Npred
> >     blablabla
> >     return res
> >
> > When you say "previously defined N=self.Npred", what does that mean? You
> > defined N earlier as a global? In that case, what "self" variable is it
> > picking up? Almost certainly not the one you intend. That way of doing
> > things seems very dangerous to me; you'd be much better off using None
> > as a default value and setting it inside your function. Or if you want
> > to be able to pass None as a real value for cols, use some other value
> > as a "default value" flag, e.g.:
> >
> > def write(self, filename, matr, cols=-1, format='asc'):
> >     if cols == -1:
> >         cols = self.Npred
> >     blablabla
> >     return res
> >
> > This is safe and is guaranteed to do what you intend. Doing it the other
> > way is asking for trouble.
> >
> > --
> > Robin Munn
> > rmunn at pobox.com



More information about the Python-list mailing list