我一直在尝试使用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 方法,而无需组合它们。
当我们在它的时候...我一直在调用这些方法而不是函数...我说的对吗?
正如其他人所指出的,您需要使用 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)
当我们在它的时候...我一直在调用这些方法而不是函数...我说的对吗?
method
-> 类成员的例程。
function
->返回结果的例程(与数学函数比较(
procedure
->不返回结果
的例程 member
->类或结构的一部分(成员变量或成员函数等(
过程在python中很奇怪,因为即使过程不返回任何内容,您仍然可以将其结果分配给变量。
在这种情况下,结果None
请参见此处:Python 过程返回值
如果doMath
和square
是类的一部分,它们都应该有另一个名为self
的参数。 方法调用在此self
参数上进行。 例如:
def doMath(self, x, y):
z = x + y
z = self.square(z)
return z
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()