我在一个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()日志服务是什么意思?如果你把self放进去,它通常引用User类。但是cls指的是什么呢?
提前谢谢。
发布于 2013-01-21 14:36:51
名称并不重要,但是应用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。这只是一个约定,但为了保持一致性,最好遵循它。
发布于 2013-01-21 14:40:06
"cls“是用于表示"class”的常规标识符。
@classmethod修饰器调用方法,例如。obj.method(arg),则将表示该对象的类的类对象传递给第一个参数(本例中为cls)。
如果没有@classmethod修饰符,对象本身将被传递给第一个参数(本例中为cls)。
https://stackoverflow.com/questions/14433450
复制相似问题