Проблема объектного программирования

#python #list #function #class

Вопрос:

Я пытаюсь решить это упражнение. Мой желаемый результат-распечатать словарь со значениями; название «Trasa» и список каждой Варшавы 1 Варшава 2 и т. Д. Для этого я создал вторую функцию : stat_info . Текущий выход: {'Name and information': ['Ko', lt;function station.stat_info at 0x7fe4dbbe3040gt;]} Желаемый выход : {'Name and information': ['Ko',[Warszawa1, Warszawa 2 etc.] Мой код:

 class station:  def __init__(self, name, possibility_of_change, time_of_stay):  self.name = name  self.possibility_of_change = possibility_of_change  self.time_of_stay = time_of_stay  stat = []  stat.append(self.name)  self.stat = stat   def stat_info(self):  return self.stat    class Position_of_route:  def __init__(self, station, time_between_2_stays):  self.station = station  self.time_between_2_stays = time_between_2_stays   class Route(station):  def __init__(self, name1, list_of_positions):  self.name1 = name1  self.list_of_postitions = list_of_positions    def trasa_info(self):  return 5    def generate(self, time):  przystanki = [  station("Warszawa1",True,3),  station("Warszawa2",True,5),  station("Warszawa3",False,0),  station("Warszawa4",True,3),  station("Warszawa5",True,7),  station("Warszawa6",True,3),  station("Warszawa7",True,9),  station("Warszawa8",False,0),  station("Warszawa9",True,12),  ]  a={  "Name and information": [self.name1,station.stat_info]   }  return a   print(Route("Ko",[1,2]).generate(18))  

Ответ №1:

Вы не вызываете station.stat_info функцию, а просто сохраняете ее ссылку. В любом случае, это метод класса, и вам нужно будет вызвать эквивалентный метод экземпляра, используя station имеющиеся у вас экземпляры, которые хранятся в przystanki списке. Например:

 a = { "Name and information": [self.name1,  [przystanek.stat_info() for przystanek in przystanki]] }  

В этом примере вы получите список списков в соответствующем месте в вашей структуре данных:

 {'Name and information': ['Ko', [['Warszawa1'], ['Warszawa2'], ['Warszawa3'], ['Warszawa4'], ['Warszawa5'], ['Warszawa6'], ['Warszawa7'], ['Warszawa8'], ['Warszawa9']]]}  

Вопрос немного неоднозначен в отношении точного требуемого формата вывода, и код вызова может отличаться, если вы хотите объединить списки, например:

 info = []  for przystanek in przystanki:  info.extend(przystanek.stat_info())  a = {   "Name and information": [self.name1, info]  }  

если бы вы хотели вместо этого иметь:

 {'Name and information': ['Ko', ['Warszawa1', 'Warszawa2', 'Warszawa3', 'Warszawa4', 'Warszawa5', 'Warszawa6', 'Warszawa7', 'Warszawa8', 'Warszawa9']]}  

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


Примечание по именам переменных: przystanki означает «станции» на польском языке, поэтому я выбрал przystanek (что означает «станция» в единственном числе) для переменной цикла.

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

1. @Kokin какую ошибку вы увидели? (Обратите внимание , что код, показанный здесь, нужно будет заменить существующим a={ .... } , с соответствующим отступом.)

2. Тем временем я исправил имя пшистанки, и именно поэтому оно не работает. Извините, что потратили впустую ваше время, ваше решение было действительно сложным и отличным 🙂

3. @Kokin Хорошо, значит, теперь это работает на тебя?

4. Могу я спросить вас об одной вещи? Аналогичный вопрос, связанный с объектами. Могу я попросить вас связаться с нами?

5. @Kokin Если у вас есть еще один вопрос, пожалуйста, разместите его на этом сайте в качестве нового вопроса. Есть много других людей, которые могут помочь ответить на этот вопрос, если я сам его не вижу.