方法、`classmethod`和`staticmethod`是如何在Python中实现的?
Python中的方法在什么时候获取方法、`classmethod`和`staticmethod`是如何在Python中实现的?,python,class,methods,built-in,Python,Class,Methods,Built In,Python中的方法在什么时候获取get属性-一旦他们在课堂上被定义了?为什么Python允许我定义一个没有任何参数的方法(甚至不是第一个self参数) 我知道如何使用classmethod和staticmethod,而且我知道它们是内置函数,但是这样修饰的函数会发生什么呢 本质上,我想知道类定义和类构造之间发生的“魔力” 您还可以在funcobject.c中查看类和静态方法对象的源代码: 类方法对象定义从第694行开始,而静态方法对象定义从第852行开始。(当methodobject.c也
get
属性-一旦他们在课堂上被定义了?为什么Python允许我定义一个没有任何参数的方法(甚至不是第一个self
参数)
我知道如何使用classmethod
和staticmethod
,而且我知道它们是内置函数,但是这样修饰的函数会发生什么呢
本质上,我想知道类定义和类构造之间发生的“魔力”
您还可以在funcobject.c中查看类和静态方法对象的源代码:
类方法对象定义从第694行开始,而静态方法对象定义从第852行开始。(当methodobject.c也存在时,他们在funcobject.c中有标题为“method”的项目,我确实觉得有点可笑。)参考@JAB的答案
使用非数据描述符协议,纯Python版本的staticmethod()如下所示:
类静态方法(对象):
“在Objects/funcobject.c中模拟PyStaticMethod_Type()”
定义初始化(self,f):
self.f=f
定义获取(self、obj、objtype=None):
返回自我
使用非数据描述符协议,classmethod()的纯Python版本如下所示:
class类方法(对象):
“在Objects/funcobject.c中模拟PyClassMethod_Type()”
定义初始化(self,f):
self.f=f
定义获取(self、obj、klass=None):
如果klass为无:
klass=类型(obj)
def newfunc(*参数):
返回self.f(klass,*args)
返回newfunc