Python:从方法调用方法

Python:从方法调用方法,python,methods,global-methods,Python,Methods,Global Methods,我一直在尝试使用Python制作足球比赛。我遇到的大多数问题我都能找到解决的办法。但是,我遇到了错误“globalname”---“notdefined”,指的是一个方法名。从我所看到的情况来看,问题是试图从一个方法调用一个方法。因为粘贴我的代码会花费太多时间来解释发生了什么,所以我写了一个非常基本的问题示例: class example(): def doMath(x,y): z = x + y z = square(z) return

我一直在尝试使用Python制作足球比赛。我遇到的大多数问题我都能找到解决的办法。但是,我遇到了错误“globalname”---“notdefined”,指的是一个方法名。从我所看到的情况来看,问题是试图从一个方法调用一个方法。因为粘贴我的代码会花费太多时间来解释发生了什么,所以我写了一个非常基本的问题示例:

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方法设置为子方法(我不知道它叫什么,它只是在primary方法下缩进)解决了这个问题。然而,这在我的足球代码中是不可行的,因为我会有多个方法调用它。我见过类似的问题,但答案仍然不符合我的代码。一个全局函数似乎就是我想要的,但它通常会导致一些不存在的错误。我可以在main中添加一堆指令,但我不想添加大量的工作和代码行,这会让它变得非常难看

所以主要的问题是。。。如何让doMath方法调用square方法而不必将它们组合起来


当我们这么做的时候。。。我一直在调用这些方法而不是函数。。。我说的对吗?

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

def doMath(self, x, y):
    z = x + y
    z = self.square(z)
    return z
#!/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)

正如其他人所指出的,您需要使用
self
,并且您需要使用一个实例正确调用您的方法,例如:

def doMath(self, x, y):
    z = x + y
    z = self.square(z)
    return z
#!/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)
当我们这么做的时候。。。我一直在调用这些方法而不是函数。。。我说的对吗

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

python中的过程很奇怪,因为即使过程不返回任何内容,您仍然可以将其结果赋给变量。

这种情况下的结果是
None
请参见此处:

这些是函数。如果它们在一个类中,那么它们也会是方法。但是它们在一个类中?当你尝试一个全局函数时会出现什么错误?我认为我做得不对。如果我将它与类中的类放在同一行,它需要一个选项卡,所以我尝试将它放在类之外。当我这样做的时候,它说它使用的变量是在创建之前被引用的。因此,我将所需的变量移到了它的内部(也是全局的),而现在它只是不喜欢在其中迭代列表的想法……为什么要在类内部定义
doMath
square
?例如,与Java不同,您不需要在Python中将所有内容都放在一个类中,如果您不打算使用任何面向对象的语言功能,您就不应该这样做。self永远不适合我:/it总是需要另一个参数(因此我必须发送doMath(1,2,3)或其他什么)我可以向你保证,
self
对你和其他人都很好。试试看!那么您创建了整个类的一个对象并使用了它?我真的没想过。。。对于另外两种情况,我将一些方法放在完全不同的类中来实现,lol我应该在程序中的每个方法中都有self吗?在属于一个类并打算附加到实例的每个方法中都应该有
self
。静态方法不需要
self
,也不需要在没有意义的地方使用类。如果您发现您的函数不需要
self
(或
cls
,对于类方法),那么一般来说,它们应该是独立的方法,而不是在类中,因为根据定义,它们不对任何类或实例数据进行操作。Ok是有意义的。把自己放在各种各样的方法中,会伤害到什么吗?(顺便说一句,谢谢你)这并不是伤害,但是将
self
放在类外的方法上是毫无意义的,因为没有
self
的实例。对于属于类的常规方法(即非类方法或静态方法),必须有一个
self
参数,否则通过实例调用它们时会出错。这很好,因为我喜欢。。。14种方法,但没有一种是有自我意识的。。。我只是把他们中的一些人放在另一个班上,这样我就可以在那里引用他们,这让我自己更加困难