Как положить несколько классов в массив и вывести их через цикл?
Не могу понять как положить все данные в классе в массив и вывести их через цикл. Делаю вот так, но ошибка. Подскажите пожалуйста. Нужно film_1 И film_2 положить в массив self.base и потом вывести его через цикл. Не дойдет до меня никак(
class Cinima:
def __init__(self,film_name,director,first_year):
self.base = []
self.film_name = film_name
self.director = director
self.first_year = first_year
def get_info(self):
print(self.film_name)
print(self.director)
print(self.first_year)
def add_films_for_base(self):
self.base.append(film_1, film_2)
def get_info_all(self):
for i in self.base:
print(i)
film_1 = Cinima('НЕПРОЩЕННЫЙ', 'Сарик Андреасян', 2018 )
film_2 = Cinima('исходный код', 'Данкан Джонс', 2011 )
Cinima.get_info_all()
Ответы (3 шт):
Ну как-то так:
class Cinima:
films_list = []
def __init__(self,film_name,director,first_year):
self.film_name = film_name
self.director = director
self.first_year = first_year
def get_info(self):
print(self.film_name)
print(self.director)
print(self.first_year)
def add_films(films):
for film in films:
Cinima.films_list.append(film)
def get_info_all():
for i in Cinima.films_list:
print(i)
def __str__(self):
return f'Название: {self.film_name}, Режиссёр: {self.director}, Год: {self.first_year}'
Cinima.add_films([Cinima('НЕПРОЩЕННЫЙ', 'Сарик Андреасян', 2018 ), Cinima('исходный код', 'Данкан Джонс', 2011)])
Cinima.get_info_all()
Вам просто надо разобраться, что какие переменные должны быть переменными экземпляра класса, а какие переменными самого класса. Список фильмов, конечно, должен быть переменной не экземпляра (представляющего конкретный фильм), а всего класса.
Если чуть модифицировать код @CrazyElf:
class Cinima:
films_list = []
def __init__(self,film_name,director,first_year):
self.film_name = film_name
self.director = director
self.first_year = first_year
Cinima.films_list.append(self)
def get_info_all():
for i in Cinima.films_list:
print(i)
def __str__(self):
return f'Название: {self.film_name}, Режиссёр: {self.director}, Год: {self.first_year}'
Cinima('НЕПРОЩЕННЫЙ', 'Сарик Андреасян', 2018)
Cinima('исходный код', 'Данкан Джонс', 2011)
Cinima.get_info_all()
Причем можно сделать films_list скрытым, чтобы напрямую извне к нему нельзя было получить доступ:
для этого член класса надо назвать через двойное подчеркивание __имя
class Cinima:
__films_list = []
def __init__(self,film_name, director, first_year):
self.film_name = film_name
self.director = director
self.first_year = first_year
Cinima.__films_list.append(self)
def get_info_all():
for i in Cinima.__films_list:
print(i)
def __str__(self):
return f'Название: {self.film_name}, Режиссёр: {self.director}, Год: {self.first_year}'
Cinima('НЕПРОЩЕННЫЙ', 'Сарик Андреасян', 2018 )
Cinima('исходный код', 'Данкан Джонс', 2011)
# сработает
Cinima.get_info_all()
# не сработает
print(*Cinima.__films_list, sep='\n')
Попробуйте так:
class Cinima:
def __init__(self, film_name, director, first_year):
self.film_name = film_name
self.director = director
self.first_year = first_year
def get_info(self):
print(self.film_name)
print(self.director)
print(self.first_year)
class InfoAll:
def __init__(self):
super().__init__()
self.base = []
self.film_1 = Cinima('НЕПРОЩЕННЫЙ', 'Сарик Андреасян', 2018 )
self.base.append(self.film_1)
self.film_2 = Cinima('исходный код', 'Данкан Джонс', 2011 )
self.base.append(self.film_2)
def get_info_all(self):
for i in self.base:
print(i.film_name, i.director, i.first_year,)
info_all = InfoAll()
info_all.get_info_all()