未定义名称“函数名称”

时间:2018-05-23 20:07:14

标签: python function

我一直在尝试为OOP完成我的一个主题,但我无法弄清楚我的函数定义有什么问题。我是这种语言的新手,已经搜索过论坛,但我找不到任何有用的东西。

  

错误讯息:      追溯(最近的呼叫最后):
       文件“/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 :(得分:1)

add()函数是Complex类的成员,但您自己调用它。

您需要像这样调用它

x.add(y)

当一个函数是下面一个类的成员时:

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

自动调用函数的对象将作为self传递。

因此,如果您致电x.add(y),则self将为xother将为y

答案 1 :(得分:0)

如果add是类Complex的方法,则必须编写x.add(y)而不是add(x,y)。

我知道它在Python中令人困惑。您需要始终将“self”应用为方法的第一个参数,尽管它不是参数,而是您调用其方法的对象。