什么是类指的是python gae?

时间:2013-01-21 06:34:06

标签: python google-app-engine google-cloud-datastore

我在facebook.py用户文件中看到过这个。

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指的是什么?

提前致谢。

2 个答案:

答案 0 :(得分:4)

名称无关紧要,但应用classmethod装饰器会使方法成为类方法。在这种情况下,第一个参数是一个类,而不是一个实例。

请使用以下代码查看实例,类和静态方法的比较:

>>> 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。这只是一个惯例,但最好遵循它以保持一致性。

答案 1 :(得分:3)

“cls”是用于表示“类”的常规标识符。

@classmethod装饰器调用方法,例如。 obj.method(arg),传递给第一个参数(在本例中为cls)一个表示对象类的类对象。

如果没有@classmethod装饰器,对象本身将被传递给第一个参数(在本例中为cls)。