2017-03-15 20 views
-1

私がやっていることはより複雑ですが、私は問題を明確にするために簡単な例を示しました。私はすでにそれを定義した後に関数を呼び出そうとしています。Python 3.6関数は私の問題を引き起こし続けます

class rojas(): 
    def get_avg_height(self, height): 
     height = {'Julian': 180, 'Aaron': 170, 'Bruno': 170, 'Julio': 175} 
     avg = (height['Julian'] + height['Aaron'] + height['Bruno'] + height['Julio'])/len(height) 
     return height 

    get_avg_height(self,height) 

私のトレースバックがある:NameError: name 'self' is not defined と私はそれが高さになったならば、高さがあまりにも「定義されていない」だろうと確信しています。

ありがとう、ありがとうございました。

+0

これはコードの構造を正確に表していますか?あなたのエラーが予想されるためです。さらに、これはPythonでインスタンスメソッドを呼び出す方法ではありません。チュートリアルのメモ、またはレビューするクラスの[公式チュートリアル](https://docs.python.org/3/tutorial/classes.html)を参照してください。 – idjaw

+0

あなたには2つの問題があります。ほとんどの場合、クラス定義後のオブジェクト*ではなく、クラス定義内で関数を呼び出そうとしています。より根本的に、ここでクラスを定義した理由は明確ではありません。メソッドは 'self'または引数' height'を使用しません。 – chepner

+0

おそらく 'return avg'をしたいときに' height'を返すのですが、 'return'文を変更してください。 'get_avg_height'メソッドから' height'パラメータを削除してください。最後に、最後の行をインデント解除し、 'print rojas()。get_avg_height()' <これをデモンストレーション用に変更します。代わりに 'rojas'の新しいインスタンスを作成し、そのメソッドを呼び出す必要があります – davedwards

答えて

0

いくつかの問題があります。最初にget_avg_heightはクラスで定義されています。つまり、それを呼び出すクラスのインスタンスが必要です。 b.get_avg_height(heights)のようになります。次に、クラスに定義された関数があり、関数selfを呼び出すと、明示的にではなくインスタンスに暗黙的に設定されます。したがって、呼び出すときには1つのパラメータしか持たないはずです。 b.get_avg_height(heights)では、selfは関数の本体でbと等しくなります。 heightパラメータは、使用する前に破棄されるので、渡されたものの中には、heightがすぐに割り当てられます。 4番目のコールサイトではheightという名前の変数は定義されていないので、実際には何も渡していません。コールサイトで自分自身を削除した後、同じ名前の高さについてエラーが発生します。 6番目のインデントが乱され、コールサイトが最も外側のレベルにある必要があります。

関連する問題