类方法lambda-Python

类方法lambda-Python,python,lambda,mocking,class-method,Python,Lambda,Mocking,Class Method,我很难理解这段代码。 我知道我们正在使用一些模拟而不是API端点来节省测试时间 我不理解的是类方法(lambda cls:self.preapproval)结构。 如果在代码中我根本不用lambda cls,那么使用lambda cls有什么意义呢 我希望我足够清楚,如果有人能解释一下这件事,我会非常高兴的 非常感谢 @patch("paypaladaptive.api.endpoints.UrlRequest", MockUrlRequestPreapproval) def te

我很难理解这段代码。 我知道我们正在使用一些模拟而不是API端点来节省测试时间

我不理解的是类方法(lambda cls:self.preapproval)结构。 如果在代码中我根本不用lambda cls,那么使用lambda cls有什么意义呢

我希望我足够清楚,如果有人能解释一下这件事,我会非常高兴的

非常感谢

@patch("paypaladaptive.api.endpoints.UrlRequest",
       MockUrlRequestPreapproval)
def test_preapproval(self):
    # I don't understand this code, it is very confusing. Why do I need to use a lambda structure if in the code itself I don't use cls (self.preapproval)
    MockUrlRequestPreapproval.preapproval = (
        classmethod(lambda cls: self.preapproval))
    self.assertTrue(self.preapproval.process())
    self.preapproval = Preapproval.objects.get(pk=self.preapproval.pk)
    self.assertNotEqual(self.preapproval.preapproval_key, "")
    self.assertEqual(self.preapproval.status, "created")

cls
只是lambda的一个参数名!你根本不用它
lambda cls:self.preapproval)
classmethod
生成函数objec,由于lambda生成函数对象,您需要将其用于pass
self.preapproval
,因为
classmethod
s的第一个参数必须是函数对象

的第一个参数必须是接受一个或多个参数的函数。调用其中任何一项都将导致错误:

classmethod(self.preapproval) # Not a function
classmethod(lambda: self.preapproval) # Needs one argument
这是可行的,但太冗长了:

def get_preapproval(cls):
    return self.preapproval

classmethod(get_preapproval)
这就是代码使用lambda的原因

也许可以稍微改进一下:

classmethod(lambda _: self.preapproval)

这表明不需要参数。

如何编写此代码以提高可读性?为什么它应该是一个classmethod并首先使用lambda?因为lambda生成一个函数对象,您需要将它用于pass
self。预批准
,因为
classmethod
的第一个参数需要是一个函数对象@GP89啊,对,它可能需要>=1,因为类需要被传递。谢谢这就更清楚了。但是为什么我们首先需要一个classmethod呢。我们就不能把lambda放进去吗?或者更好,为什么不直接执行:MockUrlRequestPreapproval.preapproval=self.preapproval我认为这是因为代码的其余部分需要一个classmethod。执行其他操作可能会改变类的行为@赛博乔克