4

Dive Into Pythonで、MarkPilgrimは次のように述べています。

クラスメソッドを定義するときは、各メソッドの最初の引数として自分自身を明示的にリストする必要があります

次に、彼はこれのいくつかの例をコードで示します。

def clear(self): self.data.clear()
def copy(self):
    if self.__class__ is UserDict:
        return UserDict(self.data)
    import copy
    return copy.copy(self)

@classmethodオンラインでPythonコードを調べているときに、デコレータに出くわしました。その例は次のとおりです。

class Logger:
    @classmethod
    def debug(msg):
        print "DEBUG: " + msg

self(関数にパラメーターがないことに注意してくださいdebug

self最初のパラメーターとして使用するクラスメソッドと@classmethodデコレーターを使用するクラスメソッドの定義に違いはありますか?そうでない場合、クラスメソッドを定義する1つの方法は、他の方法よりも一般的に使用/優先されますか?

4

2 に答える 2

7

@classmethodインスタンスメソッドを定義することと同じではありません。で定義された関数は、特定のインスタンスを受け取るインスタンスメソッドとは対照的に、最初の引数としてクラス@classmethodを受け取ります。詳細については、こちらのPythonドキュメントを参照してください。

于 2012-10-21T23:51:51.897 に答える
0

自己は暗黙的ではなく、決して暗黙的ではありません。

「自己は暗黙のうちになりません。

自己を明確にすることは良いことです。変数の解決方法に関するあいまいさを取り除くことで、コードを明確にします。また、関数とメソッドの違いも小さくなります。」

http://www.python.org/dev/peps/pep-3099/

于 2012-10-21T23:55:16.780 に答える