> Here is my main class: > > class PenduGTK: > > Inside the class is a method with a bit of code: > > def masque(chaine,liInd=0): > > i = 0 > lenght = len(chaine) > > The offending line is the one with len(chaine) > > Here are the error messages: > > penduGTK.py > Traceback (most recent call last): > File "/home/xxx/bin/penduGTK.py", line 23, in enter_callback > self.lblMot.set_text(self.masque(self.motChoisi)) > File "/home/xxx/bin/penduGTK.py", line 44, in masque > lenght = len(chaine) > AttributeError: PenduGTK instance has no attribute '__len__'
A method takes as its first argument a reference to the class. That is, in 'def some_method(blah1, blah2, blah3)', blah1 would be a reference to the class in which some_method is defined. If you look at the error message, you see Python complains that the PenduGTK instance has no __len__ attribute, meaning 'chaine' is a PenduGTK instance: it's the first argument in the method, taking a reference to the class. See eg http://diveintopython.org/object_oriented_framework/defining_classes.html (also, carefully read the error and think what it could mean: it has a lot of hints to solve your problem). Thus, define a method with an extra (first) argument. This is usually called self: def masque(self, chaine, liInd=0): Last note on a totally different thing, because this confused me a bit: preferably avoid avoid the lowercase L, lowercase i and uppercase I next to each other. It's very hard to read. See eg http://www.python.org/dev/peps/pep-0008/ (section 'Names to Avoid'). To me, it initially read something like iiind=0. Which is ok, as long as I don't have to work with the code. But it may also bite you some day. > I would think it has to do with namespaces, scopes and visibility. But how do > I refer to built-in functions from inside a class? Just as you did above: len(chaine). But since that wasn't your problem, I guess this answer is rather meaningless. Cheers, Evert _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor