Название «имя функции» не определено - PullRequest
0 голосов
/ 23 мая 2018

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

Сообщение об ошибке: Traceback (последний последний вызов):
Файл "/home/main.py", строка 44, в
add (x, y)
NameError: имя 'add' не определено

Это программа, которую я написал.

class Complex(object):
def __init__(self, r = 0, i = 0):
   self.r = r
   self.i = i

def __str__ (self):
   return "%s + i%s" % (self.r, self.i)

def add (self, other):
   summ = Complex()
   summ.r = self.r + other.r
   summ.i = self.i + other.i
   return "Sum is %d" % summ

def dif (self, other):
   dif = Complex()
   dif.r = self.r - other.r
   dif.i = self.i - other.i 
   return dif

def multiply (self, other):
   multiply = Complex()
   multiply.r = self.r * other.r 
   multiply.i = self.i * other.i
   return "%d" % (-1 * multiply.r * multiply.i)

def divide (self, other):
   divide = Complex()
   divide.r = self.r / other.r
   divide.i = self.i / other.i 
   return "%d" % (divide.r / divide.i)

x = Complex()
y = Complex()
x.r = int(input("Type in real part of x: \n"))
x.i = int(input("Type in imaginary of x: \n"))
print (x, "\n")
y.r = int(input("Type in real part of y: \n"))
y.i = int(input("Type in imaginary of y: \n"))
print (y, "\n")
add(x, y)

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Функция add() является членом класса Complex, но вы вызываете ее самостоятельно.

Вам необходимо вызывать ее следующим образом

x.add(y)

КогдаФункция является членом класса, как показано ниже:

class Complex(object):
    def add (self, other):
        # Do stuff

Объект, для которого вызывается функция, автоматически передается как self.

Так что если вы вызываете x.add(y), self будет x и other будет y.

0 голосов
/ 23 мая 2018

Если add - это метод вашего класса Complex, тогда вы должны написать x.add (y) вместо add (x, y).

Я знаю, что это сбивает с толку в Python.Вам всегда нужно применять «я» в качестве первого аргумента метода, хотя это не аргумент, а объект, метод которого вы вызываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...