以下代码与我正在使用的代码接近而不会太长。我收到错误TypeError: is_valid() takes exactly 2 arguments (3 given)
。在我看来,我只传递了两个论点。那么第三个论点来自哪里?
模型/ 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)
控制器/ 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小时后,我的大脑变成了燕麦片。
答案 0 :(得分:7)
将代码更改为def is_valid(self, x, y)
答案 1 :(得分:5)
您有两种解决方案:
self
以保持一致性)或staticmethod
装饰器。这一行:
def is_valid(x, y):
表示调用方法时,x
是类实例,y
是参数。如果你想接受两个参数(和实例本身),你的行应该是这样的:
def is_valid(self, x, y)
但是因为你没有对实例本身做任何操作,你也可以使用staticmethod
装饰器:
@staticmethod
def is_valid(x, y):
这将消除在参数中传递的实例,并且您将只接收剩余的参数。