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 に答える
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 に答える
0

doMathsquareがクラスの一部である場合、両方とも という別のパラメータを持つ必要がありますselfselfメソッド呼び出しは、このパラメーターで行われます。例えば:

def doMath(self, x, y):
    z = x + y
    z = self.square(z)
    return z
于 2013-10-11T01:16:31.747 に答える