Rrule - чтение значений 'freq', 'interval' и т. Д.? - PullRequest
0 голосов
/ 30 января 2019

Как извлечь значения 'freq', 'interval' и т. Д. Из Rrule

from dateutil.rrule import *

my_rrule = rrule(freq=DAILY, interval=2, count=3)
print(str(my_rrule))
print(my_rrule.count())
print(my_rrule.interval())
>>>
DTSTART:20190130T025306
RRULE:FREQ=DAILY;INTERVAL=2;COUNT=3
3
Traceback (most recent call last):
  File "/home/pi/test2.py", line 6, in <module>
    print(my_rrule.interval())
AttributeError: 'rrule' object has no attribute 'interval'
>>>

Этот метод считывает значение атрибута 'count', но разбивает на 'interval',' freq 'и т. д.

1 Ответ

0 голосов
/ 30 января 2019

изменить код

print(my_rrule.interval())

на

print(my_rrule._interval)

Вы можете получить подсказку от функции инициализации rrule, она сохраняет интервал как _interval в классе, что означает, что вы должнылучше не пытаться использовать эту переменную извне, потому что у экземпляра может быть побочный эффект от использования этой переменной путем изменения ее значения, или ее логика зависит от него.

def __init__(self, freq, dtstart=None,
             interval=1, wkst=None, count=None, until=None, bysetpos=None,
             bymonth=None, bymonthday=None, byyearday=None, byeaster=None,
             byweekno=None, byweekday=None,
             byhour=None, byminute=None, bysecond=None,
             cache=False):
    super(rrule, self).__init__(cache)
    global easter
    if not dtstart:
        if until and until.tzinfo:
            dtstart = datetime.datetime.now(tz=until.tzinfo).replace(microsecond=0)
        else:           
            dtstart = datetime.datetime.now().replace(microsecond=0)
    elif not isinstance(dtstart, datetime.datetime):
        dtstart = datetime.datetime.fromordinal(dtstart.toordinal())
    else:
        dtstart = dtstart.replace(microsecond=0)
    self._dtstart = dtstart
    self._tzinfo = dtstart.tzinfo
    self._freq = freq
    self._interval = interval
    self._count = count
...