Python2.7/App引擎-TypeError:is_valid()正好接受2个参数(给定3个)
下面的代码与我正在使用的代码非常接近,不会太长。我得到一个错误Python2.7/App引擎-TypeError:is_valid()正好接受2个参数(给定3个),python,google-app-engine,python-2.7,typeerror,Python,Google App Engine,Python 2.7,Typeerror,下面的代码与我正在使用的代码非常接近,不会太长。我得到一个错误TypeError:is\u valid()正好接受2个参数(给定3个)。在我看来,我只传递了两个论点。那么第三个论点来自哪里呢 models/MyModel.py from google.appengine.ext import db class MyModel(db.model): a = db.StringProperty(required=True) b = db.StringProperty(require
TypeError:is\u valid()正好接受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)
控制器/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
导入webapp2
从models.MyModel导入更新
类WebHandler(webapp2.RequestHandler):
def get(自我):
var_x=“字符串”
var_y=“字符串”
z=更新()
如果z.is_有效(var_x,var_y):将代码更改为def is_有效(self,x,y)
解决方案
您有两种解决方案:
- 在方法定义中添加表示实例的参数(为保持一致性,将其命名为
self
),或
- 在方法上使用
staticmethod
decorator
解释和例子
这一行:
def is_valid(x, y):
意味着在调用该方法时,x
是类实例,y
是参数。如果希望接受两个参数(以及实例本身),则行应该如下所示:
def is_valid(self, x, y)
但由于您没有对实例本身执行任何操作,因此也可以使用staticmethod
decorator:
@staticmethod
def is_valid(x, y):
这将消除在参数中传递的实例,并且您将只接收剩余的参数。或者更好,完全去掉这个类,因为它没有封装任何数据,也没有我能看到的任何用途。@Wooble:也许它是为了将来的某个用途,而OP不想更改API?下面的Tadeck和Shay都是对的。昨晚我确实使用了self,但由于我太累了,我也从WebHandler传递self,这给了我一个不同的类型错误,在尝试将WebHandler实例传递到Update实例的过程中。我不知道为什么我昨晚没有想到@staticmethod
,但你说得对,这也行。我给你一个简单的答案,因为我补充了这一点,并且更详细地讲了一点。多亏了塔德克和谢伊·埃里希曼