Может ли кто-нибудь указать мне на причину, по которой этот конструктор вызывается дважды?

#python #function #constructor #kivy

Вопрос:

Я заметил, что код дважды печатает дату в конструкторе, и мне трудно понять, почему, так как я считаю, что я создаю экземпляр объекта только один раз в своем коде.

Это конструктор

 def __init__(self):
        self.today = date.today()
        print(self.today)
 

Вот где я создаю его экземпляр

 self.data = database()
self.schedule_today = self.data.get_bulletin()
 

Полный код для этого раздела программы с некоторыми незаконченными функциями

 class database:

    sch_today = ['apt: 8:00', "breakfast", "music", 'apt: 9:00', "therapy", 'apt: 12:00', "lunch"]
    test_schedule = []

    def __init__(self):
        self.today = date.today()
        print(self.today)

    def get_parse_bulletin_list(self):
        temp = []
        index = 0
        for i in self.sch_today:
            if i[0:3] == 'apt':
                while index%3 != 0:
                    temp.append('')
                    index =1
                temp.append(i)
            else:
                temp.append(i)
            index  = 1
        return temp

    def get_bulletin(self):
        n_count = 1
        temp = []
        ref = self.get_parse_bulletin_list()
        for i in ref:
            if i[0:3] == 'apt':
                temp.append(paper_scrap().get_layout())
                n_count = 1
            elif not i:
                temp.append(Notecard().blank_layout())
            #elif i[0:5] == '[hlf]':
                #temp.append(Notecard())
            elif n_count >= 3: #allign left
                temp.append(Notecard())
            else:
                temp.append(Notecard())
                n_count  = 1
        return temp

    def update_schedule(self):
        with open('calendar.txt') as r:
            pass

class BulletinInterface(RelativeLayout):

    def __init__(self, **kwargs):
        super(BulletinInterface, self).__init__(**kwargs)

        self.data = database()
        self.schedule_today = self.data.get_bulletin()

        self.l1 = BulletinArea(size_hint=(1,1),
                          padding=(38, 135, 37, 34),
                          orientation=('tb-lr'))
        self.add_widget(self.l1)

        self.b1 = Button(text="test",
                         background_color=(1, 1, 1, 1),
                         size_hint=(0.1, 0.1)
                         )
        self.b1.bind(on_press=self.bulletin_init)
        self.add_widget(self.b1)

        # bulletin board initialize
        self.bulletin_init()


    def bulletin_init(self, touch=None):
        self.init_bulletin(self.schedule_today)

    def init_bulletin(self, element_list):
        for i in element_list:
            self.l1.add_widget(i)


 

Комментарии:

1. Но сколько раз вы создаете экземпляр BulletinInterface ?

2. @quamrana Я верю только один раз, когда запускаю класс сборки. Однако класс, похоже, создается дважды, и я, похоже, не могу понять, почему. Я еще немного просмотрю свой код

3. а если вы измените печать на: print(self.today, id(self)) вы все равно получите две распечатки, но теперь с двумя разными идентификаторами?

4. @quamrana да, печатаются два разных идентификатора

5. Хорошо, ты пользуешься multiprocessing ?

Ответ №1:

Обнаружил проблему после просмотра конструкции графического интерфейса. Язык KV и обычный код python создавали экземпляры графического интерфейса, что приводило к дублированию вызовов функций для всего.