Django何时使用@staticmethod或@property

时间:2014-03-28 19:39:43

标签: python django

我一直看到使用了以下装饰器:@staticmethod@property例如:

@staticmethod
def add_url():
    return reverse('add_user')

@property
def password_not_expired(self):
    return not self.password_expired

有人可以解释何时使用其中一个?说我想添加此代码:

def get_user_type(self):
    return self.user_type

我会使用@staticmethod方法吗?

1 个答案:

答案 0 :(得分:8)

您无法在self中使用@staticmethod。因为@staticmethod唯一能做的就是让函数不被传递 self。请查看您自己的示例:add_url不会使用self参数。

“静态”这里完全是误导性的C ++和Java如何使用它。 Python @staticmethod实际上只是一个恰好存在于类中的常规函数​​,与值是否发生变化无关。

您可以在不编写二传手的情况下使用@property。事实上,这可能是最常用的方式。