これまで使用したことのないDjangoアプリを統合しているときに、クラスで関数を定義するために使用される2つの異なる方法を見つけました。作者は両方とも非常に意図的に使用しているようです。最初のものは私自身がよく使うものです:
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
もう1つは、私が使用しないものです。これは主に、いつ使用するのか、何のために使用するのかがわからないためです。
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
Pythonのドキュメントでは、classmethod
デコレータは次の文で説明されています。
クラスメソッドは、インスタンスメソッドがインスタンスを受け取るのと同じように、暗黙の最初の引数としてクラスを受け取ります。
したがって、私cls
はDummy
それ自体を参照していると思います(class
インスタンスではなく、)。私はいつでもこれを行うことができたので、なぜこれが存在するのか正確には理解していません:
type(self).do_something_with_the_class
これは明確にするためだけですか、それとも私は最も重要な部分を見逃しましたか?それなしでは実行できない不気味で魅力的なことですか?