为什么我的类会引发AttributeError?

时间:2012-11-01 20:47:56

标签: python class attributes

我可能会失明,但我真的不明白为什么这堂课失败了:

  

AttributeError:NextSunday实例没有属性'trigger'

from datetime import datetime
from datetime import time
from datetime import timedelta


class NextSunday():
    def __init__(self, trigger=None):
        """
        Get date of, and number of days until, next Sunday.

        Arguments:
        - `trigger`: Add an extra week if less than trigger number of days.
        """
        self.str = u'%s (%s days)' % (self.date().date(), self.no_days())
        self.trigger = trigger

    def __unicode__(self):
        return self.str

    def __str__(self):
        return unicode(self).encode('utf-8')

    def __repr__(self):
        return '<Next Sunday: ' + self.str + '>'

    def no_days(self):
        """Get date of next sunday. """
        days = None
        for i in range(7):
            dt = datetime.now() + timedelta(days=i)
            if dt.weekday() == 6:
                days = i

        # Add another week if there are less days left then trigger
        if self.trigger:
            if days < self.trigger:
                days += 7

        return days

    def date(self):
        # The datetime obj contains the next sunday, but also the current time
        dt_of_next_sun = datetime.now() + timedelta(days=self.no_days())

        # Get the whole day
        date_of_next_sun = datetime.combine(dt_of_next_sun.date(),
                                            time(23, 59))

        return date_of_next_sun

1 个答案:

答案 0 :(得分:4)

您需要切换这些

    self.str = u'%s (%s days)' % (self.date().date(), self.no_days())
    self.trigger = trigger
像这样

    self.trigger = trigger
    self.str = u'%s (%s days)' % (self.date().date(), self.no_days())

因为否则{/ 1}}方法在创建no_days属性之前被称为。这很糟糕,因为self.trigger方法尝试读取no_days属性的值:

self.trigger