Python interpreter error, x takes no arguments (1 given)

PythonObjectMethodsArguments

Python Problem Overview


I'm writing a small piece of python as a homework assignment, and I'm not getting it to run! I don't have that much Python-experience, but I know quite a lot of Java. I'm trying to implement a Particle Swarm Optimization algorithm, and here's what I have:

class Particle:    

    def __init__(self,domain,ID):
       	self.ID = ID
    	self.gbest = None
    	self.velocity = []
    	self.current = []
    	self.pbest = []
    	for x in range(len(domain)):
     	    self.current.append(random.randint(domain[x][0],domain[x][1])) 
     	    self.velocity.append(random.randint(domain[x][0],domain[x][1])) 
            self.pbestx = self.current    		
    
    def updateVelocity():
	for x in range(0,len(self.velocity)):
	    self.velocity[x] = 2*random.random()*(self.pbestx[x]-self.current[x]) + 2 * random.random()*(self.gbest[x]-self.current[x])	
    
    	
    def updatePosition():    
        for x in range(0,len(self.current)):
    	    self.current[x] = self.current[x] + self.velocity[x]	
        	
    def updatePbest():
        if costf(self.current) < costf(self.best):
            self.best = self.current        
    
    def psoOptimize(domain,costf,noOfParticles=20, noOfRuns=30):
        particles = []
    	for i in range(noOfParticles):    
    		particle = Particle(domain,i)    
    		particles.append(particle)    
    	
    	for i in range(noOfRuns):
     	    Globalgbest = []
    	    cost = 9999999999999999999
       	for i in particles:    
 	    if costf(i.pbest) < cost:
     	        cost = costf(i.pbest)
    		Globalgbest = i.pbest
      		for particle in particles:
     		    particle.updateVelocity()
    		    particle.updatePosition()
    		    particle.updatePbest(costf)
    		    particle.gbest = Globalgbest  	
    	
    
    	return determineGbest(particles,costf)

Now, I see no reason why this shouldn't work. However, when I run it, I get this error:

"TypeError: updateVelocity() takes no arguments (1 given)"

I don't understand! I'm not giving it any arguments!

Thanks for the help,

Linus

Python Solutions


Solution 1 - Python

Python implicitly passes the object to method calls, but you need to explicitly declare the parameter for it. This is customarily named self:

def updateVelocity(self):

Solution 2 - Python

Make sure, that all of your class methods (updateVelocity, updatePosition, ...) take at least one positional argument, which is canonically named self and refers to the current instance of the class.

When you call particle.updateVelocity(), the called method implicitly gets an argument: the instance, here particle as first parameter.

Solution 3 - Python

Your updateVelocity() method is missing the explicit self parameter in its definition.

Should be something like this:

def updateVelocity(self):    
    for x in range(0,len(self.velocity)):
        self.velocity[x] = 2*random.random()*(self.pbestx[x]-self.current[x]) + 2 \
          * random.random()*(self.gbest[x]-self.current[x])

Your other methods (except for __init__) have the same problem.

Solution 4 - Python

I have been puzzled a lot with this problem, since I am relively new in Python. I cannot apply the solution to the code given by the questioned, since it's not self executable. So I bring a very simple code:

from turtle import *

ts = Screen(); tu = Turtle()

def move(x,y):
  print "move()"
  tu.goto(100,100)

ts.listen();
ts.onclick(move)

done()

As you can see, the solution consists in using two (dummy) arguments, even if they are not used either by the function itself or in calling it! It sounds crazy, but I believe there must be a reason for it (hidden from the novice!).

I have tried a lot of other ways ('self' included). It's the only one that works (for me, at least).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLinusView Question on Stackoverflow
Solution 1 - PythonFred LarsonView Answer on Stackoverflow
Solution 2 - PythonmikuView Answer on Stackoverflow
Solution 3 - PythonbgporterView Answer on Stackoverflow
Solution 4 - PythonApostolosView Answer on Stackoverflow