繁体   English   中英

Python:从方法中调用方法

[英]Python: Calling Methods from a Method

我一直在尝试使用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”存在。 我已经看到通过将平方方法作为子方法来解决此问题(我不知道它叫什么,它只是在主要方法下缩进)。 但是,这在我的足球代码中不可行,因为我将有多种方法来调用它。 我已经看到类似的问题,但是答案仍然不适合我的代码。 全局函数似乎是我要寻找的函数,但是通常会导致不存在的错误。 可以在主体上添加一堆指令,但这是很多工作和我不想添加的代码行,这会使它看起来很丑陋。

所以主要的问题是...我如何才能获得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过程返回值

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM