Ошибка типа: отсутствует 1 обязательный аргумент позиции в Python 3 во время вызова объекта - PullRequest
0 голосов
/ 27 февраля 2020

Я пишу программу на Python 3, которая создает объекты из класса, и из этих объектов я могу выполнить некоторые вычисления. Однако, когда я создаю экземпляр своего объекта и пытаюсь запустить его методы, я получаю следующую ошибку: TypeError: method1() missing 1 required positional argument: 'index'. Вот пример кода:

class Foo:
       def __init__(self, var1, var2, var3):
           """var1 and var2 are lists"""
           self.var1 = var1 
           self.var2 = var2
           self.var3 = var3

       def method1(self, index):
           return self.var3 * (self.var1[index] + self.var2[index])

       def run_calculation(self):
           for i in range(1,10):
               self.var1.append(Foo.method1(i))
               self.var2.append(Foo.method1(i))

Когда я пытаюсь запустить этот код следующим образом:

a = Foo([1],[2],3)
a.run_calculation()

Я получаю ошибку, описанную выше. method1 всегда передается необходимый аргумент, когда он вызывается во время run_calculation, поэтому я не вижу проблемы. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Проблема в том, что вы вызываете этот метод как обычный c. вам нужно использовать себя вместо Foo. в run_calculation ()

class Foo:
       def __init__(self, var1, var2, var3):
           """var1 and var2 are lists"""
           self.var1 = var1 
           self.var2 = var2
           self.var3 = var3

       def method1(self, index):
           return self.var3 * (self.var1[index] + self.var2[index])

       def run_calculation(self):
           for i in range(1,10):
               self.var1.append(self.method1(i))   # notice the self here
               self.var2.append(self.method1(i))  # notice the self here
0 голосов
/ 27 февраля 2020

вы называете это как метод класса. вот правильная версия.

class Foo:
def __init__(self, var1, var2, var3):
    """var1 and var2 are lists"""
    self.var1 = var1
    self.var2 = var2
    self.var3 = var3

def method1(self, index):
    return self.var3 * (self.var1[index] + self.var2[index])

def run_calculation(self):
    for i in range(1, 10):
        self.var1.append(self.method1(i))
        self.var2.append(self.method1(i))

    print(self.var1, self.var2)

a = Foo([1,2], [3,4], 5)
a.run_calculation()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...