Odp: Getting a class attribute

Tomek Lisowski Lisowski.Tomasz at sssa.nospam.pl
Sat Mar 25 08:56:48 CET 2000


U¿ytkownik Roger Hansen <rogerha at ifi.uio.no> w wiadomooci do grup
dyskusyjnych napisa³:ya0bt44pfdm.fsf at midgard.ifi.uio.no...
> * Oleg Broytmann
> >
> > On 24 Mar 2000, Roger Hansen wrote:
> > >     def degree_sin4(self, deg, factor = self.a * math.pi/180.0, sin =
math.sin):
> > >         return sin(deg * factor)
> > >
> > >
> > > The question is how can I get "self.a" in degree_sin4?
> >
> >     def degree_sin4(self, deg, factor = None, sin = math.sin):
> >         if factor is None:
> >             factor = self.a * math.pi/180.0
> >         return sin(deg * factor)
> >
>
> Thanks, but it's not what I'm looking for. My question was not precise
> enough, my fault.
>
> I want to calculate factor as a default parameter value, because I
> want to speed up the method. The method will typically be called
> several thousand times. It is possible to get the class atribute "a"
> in the default function parameter?

Perhaps not, but let's try it the other way. I assume, that you will not
often switch from taking the default value for factor, and setting your own
value for this parameter. If this is true, you could define a class
constant:

   self.pi_180 = math.pi/180.0

and two methods:

     def degree_sin4A(self, deg, factor, sin = math.sin):
         return sin(deg * factor)

and

     def degree_sin4B(self, deg, factor, sin = math.sin):
         return sin(deg * self.a*self.pi_180)

and then either define

self.mysin4 = self.degree_sin4A

or

self.mysin4 = self.degree_sin4B

depending on your needs and use self.mysin with the same set of parameters,
as usually. Only with the B version the factor argument will simply not be
used. As the above assignements are only name bindings, you won't lose more
time with calling self.mysin4 than with calling self.degree_sin4A (or B)
directly. Since for arguments the default value is calculated each time, the
function is called (I suppose!), it does not matter, that for version B you
pass an argument, which is not used in the body of the function.

I hope this helps you a little. Comments welcome ...

Tomasz Lisowski





More information about the Python-list mailing list