Creating a method that is simultaneously an instance and class method
在Python中,我希望能够创建一个同时作为类函数和实例方法运行的函数,但是能够更改行为。它的用例用于一组可序列化的对象和类型。举个例子:
1 2 3 4 5 6 | >>> class Thing(object): #... >>> Thing.to_json() 'A' >>> Thing().to_json() 'B' |
我知道,在python源代码的funcobject.c中,给定classmethod()的定义,这看起来对于C模块很简单。有没有一种方法可以从Python中实现这一点?
谢谢!
有了描述符的提示,我可以用以下代码来完成它:
1 2 3 4 5 6 7 8 9 10 11 12 | 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描述符的优秀教程。