1

我可能是盲人,但我真的不明白为什么这门课会失败:

AttributeError:NextSunday 实例没有属性“触发器”

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
4

1 回答 1

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())

因为否则在创建属性之前no_days调用该方法。这很糟糕,因为该方法试图读取属性的值:self.triggerno_daysself.trigger

if self.trigger:
    if days < self.trigger:
于 2012-11-01T20:50:00.210 回答