[Tutor] exercise with classes

Joel Goldstick joel.goldstick at gmail.com
Thu Feb 9 20:59:53 CET 2012


On Thu, Feb 9, 2012 at 2:23 PM, Tonu Mikk <tmikk at umn.edu> wrote:
>
>
> On Mon, Feb 6, 2012 at 12:58 PM, Dave Angel <d at davea.name> wrote:
>>
>> On 02/06/2012 01:24 PM, Tonu Mikk wrote:
>>>
>>> Now I get an error:  NameError: global name 'self' is not define.
>>>
>>> Tonu
>>>
>>>
>> Put your remarks after the stuff you quote.  You're top-posting, which
>> makes the reply difficult to follow.
>>
>> Use copy/paste to describe an error message.  You retyped the one above,
>> and added a typo.  Include the whole error, which includes the stack trace.
>>
>> If you had followed Nate's advice, you couldn't have gotten that error at
>> all, so you'll also need to post the code that actually triggers the error.
>
>
> Let's try this one more time.  I thought that I would try to make Alan's
> code work.  Here is the version what I have now:
>
> class Printer:
>   def __init__(self,number=0):
>      self.value = number
>   def sayIt(self):
>      print self.value
>
> class MyApp:
>   def __init__(self, aPrinter = None):
>       if aPrinter == None:     # if no object passed create one
>          aPrinter = Printer()
>       self.obj = aPrinter      # assign object
>   def doIt():
>       self.obj.sayIt()         # use object
>
> def test():
>   p = Printer(42)
>   a1 = MyApp()
>   a2 = MyApp(p)   # pass p object into a2
>   a1.doIt(self)   # prints default value = 0
>   a2.doIt(self)   # prints 42, the value of p

I haven't run this, but I think this is what is going on here:

When you make the call to the method you don't include self.   You
have no self variable in your namespace, so it throws the error.
However, when you write a method in a class, you need to declare the
first argument self (its a convention to call it self.  You could call
it 'me', or anything -- but don't).  self is the object itself.

So do this:
   a1.doIt()
   a2.doIt()

Alternately you could do this:
   MyApp.doIt(a1)

In this case you are saying use the object a1 which is  of the MyApp
Class.  But this looks weird
>
> test()
>
> When I run it, I get an error:
> Traceback (most recent call last):
>   File "alan_class.py", line 22, in <module>
>     test()
>   File "alan_class.py", line 19, in test
>     a1.doIt(self)   # prints default value = 0
> NameError: global name 'self' is not defined
>
>
>>
>>
>>
>>
>>
>>
>>
>> --
>>
>> DaveA
>>
>
>
>
> --
> Tonu Mikk
> Disability Services, Office for Equity and Diversity
> 612 625-3307
> tmikk at umn.edu
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>



-- 
Joel Goldstick


More information about the Tutor mailing list