我一直在尝试使用Python制作足球比赛。我遇到的大多数问题都能找到解决办法。但是,我对“全局名称”---“未定义”的错误感到困惑,指的是方法名称。从我所看到的,问题涉及尝试从方法调用方法。粘贴我的代码会花费太多时间来解释发生了什么,我写了一个非常基本的问题示例:
class example():
def doMath(x,y):
z = x + y
z = square(z)
return z
def square(z):
z = z * z
return z
print doMath(5,4)
这绝不是一个值得写作的程序,也不是进行计算的聪明方法......它只是模仿我所遇到的问题。此代码不起作用,因为方法“doMath”不知道方法“square”存在。我已经通过使square方法成为一个子方法来解决这个问题(我不知道它叫什么,它只是在主方法下缩进)。但是,这在我的足球代码中是不可行的,因为我有多种方法可以调用它。我已经看到了类似的问题,但答案仍然不适合我的代码。全局函数似乎就像我正在寻找的那样,但它通常会导致某些不存在的错误。我可以只是向主要添加一堆指令,但是这些工作和代码行我不想添加 - 这会让它变得非常丑陋。
所以主要的问题是......如何让doMath方法调用square方法而不必将它们组合起来。
虽然我们正在努力......我一直在调用这些方法而不是函数......我对此是否正确?
答案 0 :(得分:1)
正如其他人所说,您需要使用self
,并且需要使用实例正确调用方法,例如:
#!/usr/bin/python
class example():
def doMath(self, x, y):
z = x + y
z = self.square(z)
return z
def square(self, z):
z = z * z
return z
p = example()
print p.doMath(5,4)
输出:
paul@local:~/src/python$ ./square.py
81
paul@local:~/src/python$
显然,在这种特殊情况下,这些方法完全没有优势,你可以更容易地做到:
#!/usr/bin/python
def square(z):
return z * z
def doMath(x, y):
return square(x + y)
print doMath(5,4)
答案 1 :(得分:1)
虽然我们正在努力......我一直在调用这些方法而不是函数......我对此是否正确?
method
- >作为班级成员的例程
function
- >返回结果的例程(与数学函数比较)
procedure
- >不返回结果的例程
member
- >类或结构的一部分(成员变量或成员函数等)
python中的程序很奇怪,因为即使程序没有返回任何内容,你仍然可以将其结果赋值给变量。
这种情况下的结果是None
,请参见此处:Python procedure return values
答案 2 :(得分:0)
如果doMath
和square
是某个类的一部分,则它们都应该有另一个名为self
的参数。方法调用发生在此self
参数上。例如:
def doMath(self, x, y):
z = x + y
z = self.square(z)
return z
答案 3 :(得分:0)
class example():
def doMath(self,x,y):
z = x + y
z = self.square(z)
return z
def square(self,z):
z = z * z
return z
def p(self):
print self.doMath(5,4)
e=example()
e.p()