0

これは、facebook.py User ファイルの 1 つで確認できました。

class User(db.Model):
    username = db.StringProperty(required=True)
    password = db.StringProperty(required=True)
@classmethod
def get_by_email(cls, email):
    return cls.query(cls.email == email).get()

cls とはどういう意味ですか? self を入れると、普通に User クラスを参照しています。しかし、cls は何を参照しているのでしょうか。

前もって感謝します。

4

2 に答える 2

4

名前は何でも構いませんが、classmethoddecorator を適用するとメソッドがクラスメソッドになります。このような場合、最初の引数はインスタンスではなくクラスです。

次のコードを使用して、インスタンス、クラス、および静的メソッドの比較を見てください。

>>> class Test(object):
    def instance_method(sth, x):
        return sth, x
    @classmethod
    def class_method(sth, x):
        return sth, x
    @staticmethod
    def static_method(x):
        return x


>>> a = Test()
>>> a.instance_method('abc')
(<__main__.Test object at 0x0000000002C26D30>, 'abc')
>>> a.class_method('abc')
(<class '__main__.Test'>, 'abc')
>>> a.static_method('abc')
'abc'

慣例により、同じインスタンスを参照するときは、名前を付けますself。そのクラスを参照するときは、名前を付けますcls。これは慣例にすぎませんが、一貫性を保つために従うほうがよいでしょう。

于 2013-01-21T06:36:50.697 に答える
3

「cls」は、「クラス」を意味するために使用される従来の識別子です。

@classmethod デコレーターは、メソッドを呼び出します。obj.method(arg)、最初のパラメーター (この場合は cls) に、オブジェクトのクラスを表すクラス オブジェクトを渡します。

@classmethod デコレーターがないと、オブジェクト自体が最初のパラメーター (この場合は cls) に渡されます。

于 2013-01-21T06:40:06.100 に答える