我可以绕过将自身对象传递给 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_id
、response
和 exception
)不会受到在方法参数定义中包含 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')
我正在使用 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_id
、response
和 exception
)不会受到在方法参数定义中包含 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')