#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 создавали экземпляры графического интерфейса, что приводило к дублированию вызовов функций для всего.