为什么这个python方法将self作为参数

时间:2015-07-11 16:41:21

标签: python django django-models

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。会工作得很好

为清晰起见编辑了标题

4 个答案:

答案 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(),您必须将实例传递给此方法,或使用.运算符直接调用实例。