Django 何时使用 @staticmethod 或 @property

8 投票
1 回答
9146 浏览
提问于 2025-04-18 00:22

我总是看到一些装饰器被使用,比如 @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 个回答

19

在一个 @staticmethod 中,你不能使用 self。因为 @staticmethod 的作用就是让这个函数不接收 self 参数。看看你自己的例子:add_url 并没有接收 self 这个参数。

这里的“静态”这个词用得有点误导,跟 C++ 和 Java 里的用法不太一样。在 Python 中,@staticmethod 其实就是一个普通的函数,只不过它放在一个类里面而已,跟值是否改变没有关系。

你可以使用 @property 而不需要写一个 setter。实际上,这可能是最常见的用法。

撰写回答