Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2.7/App引擎-TypeError:is_valid()正好接受2个参数(给定3个)_Python_Google App Engine_Python 2.7_Typeerror - Fatal编程技术网

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
,但你说得对,这也行。我给你一个简单的答案,因为我补充了这一点,并且更详细地讲了一点。多亏了塔德克和谢伊·埃里希曼