1

私は目が見えないかもしれませんが、このクラスが失敗する理由が本当にわかりません:

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
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 に答える