python – 创建一个同时是一个实例和类方法的方法

Python中,我希望能够创建一个既可以作为类函数又用于实例方法的函数,而且可以改变行为.这个用例是一组可序列化的对象和类型.举个例子:

>>> class Thing(object):
    #...
>>> Thing.to_json()
'A'
>>> Thing().to_json()
'B'

我知道,在Python源码的funcobject.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

谢谢亚历克斯

最佳答案
当然,你只需要定义你自己的描述符类型.有一个关于Python描述符here的很好的教程.

转载注明原文:python – 创建一个同时是一个实例和类方法的方法 - 代码日志