Django 何时使用 @staticmethod 或 @property
我总是看到一些装饰器被使用,比如 @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。实际上,这可能是最常见的用法。