Tom*_*Tom 10 python static-methods decorator class-method
这是一个学术问题,不仅仅是一个实际问题.我正在尝试深入研究Python的基础,我想知道:如果我愿意,我可以在纯Python中实现staticmethod和classmethod装饰器吗?
对于staticmethod也许我可以保持一个参照原有的功能,并调用它省略了第一个参数?
对于classmethod也许我可以保持一个参照原有的功能,并把它传递的第一个参数的类型,而不是争论本身?(我怎么处理它直接在课堂上调用?)
同样,并不是我想在我的程序中实际实现它; 我想学习语言是如何运作的.如果有可能,我会非常感谢代码示例.如果没有,我希望解释为什么理论上无法做到.谢谢!
编辑:感谢您的答案和描述符协议的参考!作为进一步扩展我对Python的理解的一种方法,我想再问两件事:
这可以在没有描述符协议的情况下完成,例如在我们的类中实现__ call __特殊方法吗?
描述符协议在Python 2.7和Python 3.x中的工作方式是否相同?
再次感谢!
jfs*_*jfs 12
文档中有一些示例:
class StaticMethod(object):
"Emulate PyStaticMethod_Type() in Objects/funcobject.c"
def __init__(self, f):
self.f = f
def __get__(self, obj, objtype=None):
return self.f
Run Code Online (Sandbox Code Playgroud)
和:
class ClassMethod(object):
"Emulate PyClassMethod_Type() in Objects/funcobject.c"
def __init__(self, f):
self.f = f
def __get__(self, obj, klass=None):
if klass is None:
klass = type(obj)
def newfunc(*args):
return self.f(klass, *args)
return newfunc
Run Code Online (Sandbox Code Playgroud)