在Python中,我希望能够创建一个既可以作为类函数又可以作为实例方法的函数,但能够更改行为。用例是针对一组可序列化的对象和类型。举个例子:
>>> class Thing(object):
#...
>>> Thing.to_json()
'A'
>>> Thing().to_json()
'B'
我知道,鉴于Python源代码中funcob.c中classmethod()的定义,看起来它对于C模块来说很简单。有没有办法在python中做到这一点?
谢谢!
通过描述符的提示,我能够使用以下代码完成:
class combomethod(object):
def __init__(self, method):
self.method = method
def __get__(self, obj=None, objtype=None):
@functools.wraps(self.method)
def _wrapper(*args, **kwargs):
if obj is not None:
return self.method(obj, *args, **kwargs)
else:
return self.method(objtype, *args, **kwargs)
return _wrapper
谢谢Alex!