Python:从方法调用方法

时间:2013-10-11 01:11:11

标签: python methods global-methods

我一直在尝试使用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 个答案:

答案 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)

如果doMathsquare是某个类的一部分,则它们都应该有另一个名为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()