Ошибка компилятора 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 данный)"

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

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

Линус

3 Solutions collect form web for “Ошибка компилятора Python, x не принимает аргументов (1 данный)”

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

 def updateVelocity(self): 

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

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

У вашего 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__ ) имеют одинаковую проблему.

  • Есть ли способ проверить, содержат ли два объекта одинаковые значения в каждой из своих переменных в python?
  • Что это за "и" заявление, действительно делающее в обратном?
  • Почему оператор «есть» говорит, что эти методы не совпадают?
  • Получение имени экземпляра внутри класса __init __ ()
  • Удалить все объекты в списке
  • Создать новый экземпляр класса из метода класса
  • TensorFlow Object Detection API отображает объекты, найденные на изображении, на консоли
  • Преобразовать строку в имя объекта
  • Python - лучший язык программирования в мире.