Подтвердить что ты не робот

Ошибка интерпретатора Python, x не принимает аргументов (1 дано)

Я пишу небольшой кусочек питона в качестве домашней задачки, и я не заставляю его работать! У меня не так много опыта Python, но я знаю довольно много Java. Я пытаюсь реализовать алгоритм оптимизации рой частиц, и вот что у меня есть:

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)

Теперь я не вижу причин, почему это не должно работать. Однако, когда я запускаю его, я получаю эту ошибку:

"TypeError: updateVelocity() не принимает аргументов (1 данный)"

Я не понимаю! Я не даю никаких аргументов!

Спасибо за помощь,

Линус

4b9b3361

Ответ 1

Python неявно передает объект вызовам метода, но вам нужно явно объявить параметр для него. Обычно это называется self:

def updateVelocity(self):

Ответ 2

Убедитесь, что все ваши методы класса (updateVelocity, updatePosition,...) принимают хотя бы один позиционный аргумент, который канонически называется self и ссылается на текущий экземпляр класса.

Когда вы вызываете particle.updateVelocity(), вызываемый метод неявно получает аргумент: экземпляр здесь particle в качестве первого параметра.

Ответ 3

В вашем методе updateVelocity() отсутствует явный параметр self в его определении.

Должно быть что-то вроде этого:

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])

Другие методы (кроме __init__) имеют одинаковую проблему.

Ответ 4

Я был сильно озадачен этой проблемой, так как я недавно появился на Python. Я не могу применить решение к коду, задаваемому опрашиваемым, поскольку оно не является исполняемым самостоятельно. Поэтому я привожу очень простой код:

from turtle import *

ts = Screen(); tu = Turtle()

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

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

done()

Как видите, решение состоит в использовании двух (фиктивных) аргументов, даже если они не используются ни самой функцией, ни при ее вызове! Звучит безумно, но я считаю, что для этого должна быть причина (скрыто от новичка!).

Я пробовал много других способов (включая "себя"). Это единственный, который работает (для меня, по крайней мере).

Ответ 5

Dog() не принимает аргументов

Класс Dog():

def _init_(self, name, age):
    self.name = name
    self.age = age

def sit(self):
    print(self.name.title() + " is now sitting.")

def roll_over(self):
    print(self.name.title() + "is now rolled over.")

my_dog = Dog ("том", 6)