我可以绕过将自身对象传递给 python class 方法吗?

can I bypass passing self object to a python class method?

我正在使用 google classroom api 并且函数的参数之一需要回调。

def callback(request_id, response, exception):
    if exception is not None:
        print 'Error adding user "{0}" to the course course: {1}'.format(
            request_id, exception)
    else:
        print 'User "{0}" added as a student to the course.'.format(
            response.get('profile').get('name').get('fullName'))

在我的例子中,该方法在 class 中,据我所知,每个 python 方法都应该采用一个 self 对象,但在这种情况下,该函数将具有特定的参数,我不确定如何传递自我对象还是我应该忽略自我?问题是我打算在函数内部使用 self 。 有什么想法吗?

我想我理解你的困境。继续将 self 作为第一个参数,因为每次调用 callback() 时都会由 Python 隐式传递。所有其他位置参数(request_idresponseexception)不会受到在方法参数定义中包含 self 的影响。即:

def callback(self, request_id, response, exception):
    # ...

如果您不打算在 callback 方法(现在是一个函数)中使用 self 对象,那么您可以在函数的定义中使用 @staticmethod 装饰器,但如果我直接跟着你,这里就不是这样了。

编辑:如果你需要在不影响回调性质的情况下传递一个特定的参数,你可以使用partial,来自functools模块.我会做如下事情(在这个例子中我使用参数 request_id,但它可以是任何其他的):

from functools import partial

partial_callback = partial(callback, request_id='12345')

现在您可以在任何需要传递特定参数(在我的示例中为 request_id)的地方传递 partial_callback 而不是 callback

请注意:如果您想传递原始 callback 函数中未定义的参数,则会引发 TypeError。如果是这种情况,则使用特殊语法 **kwargs 重新定义 callback,以便 callback 现在接受关键字化的可变长度参数,这些参数将存储为键值对在名为 kwargs.

的字典中

请注意,为了在函数定义中使用参数,您必须将它们引用为 kwargs['whatever_argument_name'](就像您对任何字典所做的那样)

所以,例如,如果你想传递一个名为 extraparam 的参数,那么你需要有如下内容:

def callback(self, request_id, response, exception, **kwargs):
    # ...
    extraparam = kwargs.get('extraparam')
    if extraparam is not None:
        # ...

partial_callback = partial(callback, extraparam='whatever')