question about class methods
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Wed Mar 14 18:27:55 EDT 2007
En Wed, 14 Mar 2007 18:04:00 -0300, Darren Dale <dd55 at cornell.edu>
escribió:
> I've run across some code in a class method that I don't understand:
>
> def example(self, val=0)
> if val and not self:
> if self._exp < 0 and self._exp >= -6:
0) "Normal" methods are not class methods, but instance methods. A class
method is a method who operates on the class itself; its first argument is
the class (maybe a derived one).
> I am unfamiliar with some concepts here:
>
> 1) Under what circumstances would "if not self" be True?
"if not self" would be "if self evaluates to False as a boolean": 0, 0.0,
0j, (), [], {}... Other objects usually evaluate always to True, except if
they define some special methods: __nonzero__ and __len__. Look those on
the Python Reference Manual.
> 2) If "not self" is True, how can self have attributes?
Perhaps you think of self being None - that should never occur unless you
called the method in some convoluted way.
The class migh inherit from list, by example, and you want to compute the
average:
class StatList(list):
def avg(self):
if self: return sum(self)/len(self)
else: raise ValueError("Can't compute average on empty list")
> (This is slightly simplified code from the decimal.Decimal.__str__
> method,
> line 826 in python-2.4.4)
A Decimal number is False when 0. `if not self` is a faster way to say `if
self==0`
--
Gabriel Genellina
More information about the Python-list
mailing list