これまで使用していなかったDjangoアプリケーションを統合する中で、私はクラスで関数を定義するために2つの方法を見つけました。著者は両方を非常に意図的に使用するようです。@classmethodはいつ使うべきですか?defメソッド(self)を使うべきですか?
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
もう一つは、私はそれを使用する際に理解し、そして何のためにしていない主な理由は、私が使用していないものです::
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
はちょうど明確化のために、このか、それとも私が最も重要な部分逃さなかった:することができませんでした不気味なと魅力的なものをそれなしで済ませた?
いいですね。私は答えが分かりにくいのが好きなのです。 @classmethodはインスタンスを必要とせずに関数にアクセスできるようになりました。これはまさに私が探していたものです、ありがとう。 – marue
@marueよろしくお願いします! – Marcin
私は、インスタンス上でクラスメソッドを呼び出すのは、コーディングスタイルが悪いと言っています。そうする理由はなく、混乱の原因に過ぎません。しかし、はい(javaは同じことを許可しますが、インスタンスを通じて静的メソッドを呼び出すときにコンパイル警告を発行します) – Voo