2

次のコードは、長くなりすぎずに使用しているものに近いものです。エラーが発生しますTypeError: is_valid() takes exactly 2 arguments (3 given)。私の目には、2つの引数しか渡していない。では、3番目の議論はどこから来ているのでしょうか?

models / MyModel.py

from google.appengine.ext import db

class MyModel(db.model):
    a = db.StringProperty(required=True)
    b = db.StringProperty(required=True)
    c = db.StringProperty(required=True)

class Update:
    def is_valid(x, y)
        myquery = db.GqlQuery('SELECT * FROM Valid WHERE value = :1' x)
        v = myquery.get()

        if v.something == y:
            yet_more_stuff
            return(True)
        else:
            return(False)

controllers / WebHandler.py

import webapp2
from models.MyModel import Update

class WebHandler(webapp2.RequestHandler):
    def get(self):
        var_x = "string"
        var_y = "string"
        z = Update()
        if z.is_valid(var_x, var_y): <----- line error occurs
            do_some_stuff
        else
            do_some_other_stuff

おそらく簡単なことですが、今日18時間コーディングした後、私の脳はオートミールに変わりました。

4

2 に答える 2

7

コードをに変更しますdef is_valid(self, x, y)

于 2012-05-10T05:43:02.850 に答える
5

解決

2つの解決策があります。

  • メソッド定義にインスタンスを表す引数を追加する(self一貫性を保つために名前を付ける)、または
  • staticmethodメソッドでデコレータを使用します。

説明と例

この行:

def is_valid(x, y):

これは、メソッドが呼び出されたときに、xがクラスインスタンスでyあり、が引数であることを意味します。2つの引数(およびインスタンス自体)を受け入れたい場合、行は次のようになります。

def is_valid(self, x, y)

ただし、インスタンス自体に対してアクションを実行していないため、staticmethodデコレータを使用することもできます。

@staticmethod
def is_valid(x, y):

これにより、引数で渡されたインスタンスが削除され、残りの引数のみが受信されます。

于 2012-05-10T05:47:21.877 に答える