staticmethod和classmethod装饰器可以用纯Python实现吗?

2024-05-08 19:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个学术问题,而不是一个实际问题。我正试图深入研究Python的基础,我想知道:如果我愿意,我可以用纯Python实现staticmethod和{}装饰器吗?在

对于staticmethod也许我可以保留对原始函数的引用并调用它而忽略第一个参数?在

对于classmethod也许我可以保留对原始函数的引用并调用它传递第一个参数的类型,而不是参数本身?(我如何处理直接在课堂上被调用的问题?)在

再说一次,我并不想在我的程序中实现它;我想从中学习语言是如何工作的。如果可以的话,我会很感激的。如果没有,我会很感激解释为什么理论上不能做到。谢谢!在

编辑:感谢您的回答和对描述符协议的引用!为了进一步扩展我对Python的理解,我想再问两件事:

  • 在没有描述符协议的情况下,例如通过在我们的类中实现-call\uuu特殊方法,可以实现这一点吗?

  • 描述符协议在Python2.7和Python3.x中的工作方式是否相同?

再次感谢!在


Tags: 函数程序协议类型参数装饰基础描述符
2条回答

你应该接受J.F.Sebastian的回答,因为它直接回答了你的问题,但是问这个问题意味着你想知道描述符协议,你可以阅读here,这是用来实现这些和其他重要的Python内部构件的东西(如果谨慎使用,在你自己的代码中可能很有用)。property和常规的ol'绑定方法是使用描述符协议编写的其他东西。在

你应该去看看,当你第一次读到它的时候并不是那么简单,但是它会很快的。在

the docs中有一些示例:

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

以及:

^{pr2}$

相关问题 更多 >