В Python 2.7, как я могу вернуть вычисления без определения переменных в конструкторе?
Мой вопрос о функциональности типа getter/setter в Python. У меня есть класс Week_Of_Meetings, который берет блок данных из моего Календаря Google и выполняет некоторые вычисления на нем.
wom = Week_Of_Meetings(google_meetings_blob)
Я хочу иметь возможность вернуть что-то вроде:
wom.total_seconds_in_meetings() # returns 36000
Но я не понимаю, как декоратор типа @property типа getters / setters может помочь мне в этом. В Java я бы использовал переменные-члены, но вы не взаимодействуете с ними одинаково в Python. Как я могу вернуть расчеты, не начиная с них в конструкторе?
Class Week_Of_Meetings:
def __init__(self, google_meetings_blob)
self.google_meetings_blob = google_meetings_blob
def get_meetings_list(self, google_meetings_blob):
meetings_list = []
for meeting_id, meeting in enumerate(self.google_meetings_blob, 1):
summary = self._get_summary(meeting)
start = parse(meeting['start'].get('dateTime', meeting['start'].get('date')))
end = parse(meeting['end'].get('dateTime', meeting['end'].get('date')))
duration = end - start
num_attendees = self._get_num_attendees(meeting.get('attendees'))
m = Meeting(meeting_id, summary, start, end, duration, num_attendees)
meetings_list.append(m)
return meetings_list
def _get_summary(self, meeting):
summary = meeting.get('summary', 'No summary given')
return summary
def _get_num_attendees(self, num_attendees):
if num_attendees == None:
num_attendees = 1 # if invited only self to meeting
else:
num_attendees = len(num_attendees)
return num_attendees
Когда я добавляю self.total_seconds_in_meetings в
__init__()
Я получаю "NameError: глобальное имя 'total_seconds_in_meetings' не определено". В этом есть смысл. Это не было определено. Но я не могу определить его, когда он должен быть результатом вычислений, выполненных на google_meetings_blob. Итак, я запутался, куда идет "total_seconds_in_meetings" в классе.
Спасибо вам за помощь!
1 ответ
Конечно, в Python есть переменные-члены. Как бы классы работали без них? Вы можете установить и получить любые данные экземпляра через self
, как вы уже делаете с self.google_meetings_blob
в __init__
,