class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
为什么“was_published_recently”方法将self作为参数?肯定是没有“自我”的pub_date。会工作得很好
为清晰起见编辑了标题
答案 0 :(得分:3)
没有。没有self的pub_date
会导致NameError,因为它会引用一个不存在的本地或全局变量。
pub_date
是模型实例的属性,只能通过self
引用。
答案 1 :(得分:1)
您的商家信息中没有类别方法,只有普通方法。
在任何一种情况下,python方法(除了staticmethod
s)都会使用一个self参数来表示它们被调用的对象。或者更具体地说,第一个参数将传递给self对象,因此你不能拒绝定义一个self参数,只给它一个不同的名字。
此处有关类方法的更多详细信息:When should I use @classmethod and when def method(self)?
答案 2 :(得分:0)
self
更改对象实例的属性。如果需要类方法,则不能更改或访问特定变量的属性。如果pub_date没有更改,那么您可以将其设为类变量并在@classmethod
之上添加was_published_recently
。然后,将self
更改为cls
答案 3 :(得分:0)
如果没有was_published_recently()
实例,即Question
,则无法调用方法self
。
pub_date
是模型Question
的一个字段,没有任何模型实例,它不会包含任何value
,因为它只是一个变量。您将无法通过调用函数was_published_recently()
来获取值,因为它不具有pub_date
的值来执行必要的计算。
因此,要调用方法was_published_recently()
,您必须将实例传递给此方法,或使用.
运算符直接调用实例。