Ошибка компилятора 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 есть ли способ узнать, реализует ли объект «реализует интерфейс», прежде чем передать его функции?
  • Преобразовать строку в имя объекта
  • Почему re.groups () не дает мне ничего?
  • Путаница о том, как numpy применяется вдоль оси и понимает список
  • Python: создать объект и добавить к нему атрибуты
  • Создать новый экземпляр класса из метода класса
  • Python: как передать аргумент по умолчанию методу экземпляра с переменной экземпляра?
  • В Python, какой оператор переопределить для «if object:»?
  • Python - лучший язык программирования в мире.