Przekazywanie instancji klasy Calendar między funkcjami i klasami

0

Cześć,

Mam taki kod a w nim globalną zmienną calendar:

class EventManagerMenu(Menu):
    def __init__(self):
        self.add_item('Add event', self.add_event)
        self.add_item('Remove event', self.remove_event)
        self.add_item('Search event', self.search_event)
        self.add_item('Display events', self.display_events)
        super().__init__(title='Manage events')
 
    def add_event(self):
        event = read_event()
        perform = yes_or_no(prompt='Are you sure you want to add this event?')
        if perform:
            calendar.add_event(event)
            print('Event added.')
        else:
            print('Event not added.')
 
    def remove_event(self):
        if not calendar.events:
            print('Error: no such any events.')
            return
        date = read_date()
        valid = False
        events = calendar.get_events_at_date(date)
        event = None
        while not valid:
            try:
                for index, event in enumerate(events):
                    print(index, '=>', event)
                try:
                    event = events[int(input('Which event do you want to remove?\n> '))]
                except ValueError as e:
                    raise ValueError('Error: not a number.') from e
                if event not in events:
                    raise ValueError("Error: event doesn't exist.")
                valid = True
            except ValueError as e:
                print(e)
        perform = yes_or_no(prompt='Are you sure you want to remove this event?')
        if perform:
            calendar.remove_event(event)
            print('Event removed.')
        else:
            print('Event not removed.')
 
    def search_event(self):
        if not calendar.events:
            print('Error: no such any events.')
            return
        date = read_date()
        found_events = [event for event in calendar.events if event.date == date]
        if found_events:
            print('Found events:')
            for event in found_events:
                print(event)
        else:
            print('Not found events meeting the specified criteria.')
 
    def display_events(self):
        if not calendar.events:
            print('Error: no such any events.')
            return
        print('Events list:')
        for event in self.calendar.events:
            print(event)

Moje pytanie brzmi jak najrozsądniej w tym przypadku uniknąć stosowania globalnych zmiennych? Czy to prawda że nie powinno się używać singletonów w żadnym kodzie? Jak polecacie przekazywać informację o instancji klasy Calendar pomiędzy klasami i funkcjami? Czy użycie mixinów do tego celu to dobra metoda? Da się tu zastosować dekoratory?

1

Najlepiej byłoby przekazać instancje klasy Calendar jako parametr konstruktora.

1 użytkowników online, w tym zalogowanych: 0, gości: 1