[英]Python: class methods calling other class methods when initial method is called from within another class
[英]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过程返回值
如果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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.