On 16/03/13 09:46, Joshua Wilkerson wrote:
The program keeps telling me that the __init__ in Rock takes two arguments and 
only one is given. Ideas?


Yes. You need to look at the arguments required when you construct a Rock() 
instance, and compare it to the arguments actually given.


[snip irrelevant code]
class Rock(games.Sprite):
     """
     A rock which falls to the ground.
     """
     image = games.load_image("rock.jpg")
     speed = 1
     def __init__(self, x, y = 90):
         """ Initiate a rock object. """

Here you define the constructor (to be precise: actually the *initialiser*) for a Rock. 
It takes three arguments, the magic "self" argument that Python automatically 
provides, x, and an optional y argument. So when you create a Rock instance, the method 
*requires* two arguments: self and x. Since Python provides the self, you *must* provide 
an x.

So let's see what you do:


def main():
     """ Play the game. """
[...]
     the_rock = Rock()


You don't provide an x, and so Python complains that it expects two arguments 
but only receives one (the self argument that it provides for you).


Traceback (most recent call last):
   File "C:\Users\Joshua\Projects\Avalanche\Avalanche.py", line 129, in <module>
     main()
   File "C:\Users\Joshua\Projects\Avalanche\Avalanche.py", line 117, in main
     the_rock = Rock()
TypeError: __init__() takes at least 2 arguments (1 given)

Notice that the exception tells you exactly *where* the problem is, and *what* the problem is. The 
only thing you actually need think about about is that, being a method rather than an ordinary 
function, behind the scenes Python slips in a "self" argument, thus the "1 
given" part.



--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to