Python中的方法在什么时候获得get
属性? - 一旦他们在课堂上定义了?为什么Python让我定义一个没有任何参数的方法(甚至不是第一个self
参数)?
我知道如何使用classmethod
和staticmethod
,我知道它们是内置函数,但是如此装饰的函数会发生什么?
基本上,我想知道在类定义和类构造之间发生的“魔力”。
答案 0 :(得分:23)
检查一下。
http://docs.python.org/howto/descriptor.html#static-methods-and-class-methods
您还可以在funcobject.c中查看类和静态方法对象的源代码:
http://hg.python.org/cpython/file/69b416cd1727/Objects/funcobject.c
类方法对象定义从第694行开始,而静态方法对象定义从第852行开始。(我确实发现当methodobject.c也存在时,它们在funcobject.c中有名为“method”的项目很有趣。)
答案 1 :(得分:4)
供参考,摘自@JAB回答中的the first link
使用非数据描述符协议,纯Python版本的staticmethod()如下所示:
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
...
使用非数据描述符协议,纯Python版本的classmethod()如下所示:
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