0

我一直在尝试使用 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 方法而不必组合它们。

当我们这样做时......我一直在调用这些方法而不是函数......我对此是否正确?

4

4 回答 4

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)
于 2013-10-11T01:29:12.270 回答
1

当我们这样做时......我一直在调用这些方法而不是函数......我对此是否正确?

method-> 作为类成员的例程。
function-> 返回结果的例程(与数学函数比较)
procedure-> 不返回结果的例程
member-> 类或结构的一部分(成员变量或成员函数等)

python 中的过程很奇怪,因为即使过程不返回任何内容,您仍然可以将其结果分配给变量。
这种情况下的结果None见此处:Python 过程返回值

于 2013-10-11T15:08:01.223 回答
0

如果doMathsquare是一个类的一部分,它们都应该有另一个名为 的参数self。方法调用发生在此self参数上。例如:

def doMath(self, x, y):
    z = x + y
    z = self.square(z)
    return z
于 2013-10-11T01:16:31.747 回答
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()
于 2013-10-11T01:35:54.447 回答