Pythonのメソッドはどの時点でget
プロパティを取得しますか?-クラスで定義されるとすぐに?Pythonで引数なしで(最初の引数でさえも)メソッドを定義できるのはなぜself
ですか?
classmethod
との使い方をstaticmethod
知っていて、それらが組み込み関数であることは知っていますが、そのように装飾された関数はどうなりますか?
基本的に、クラス定義とクラス構築の間で発生する「魔法」について疑問に思っています。
これをチェックしてください。
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」というタイトルのアイテムがあるのはちょっとおかしいと思います)。
参考までに、@JABの回答の最初のリンクから
非データ記述子プロトコルを使用すると、staticmethod()の純粋なPythonバージョンは次のようになります。
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
..。
非データ記述子プロトコルを使用すると、classmethod()の純粋なPythonバージョンは次のようになります。
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