Как добавить с клавиатуры экземпляры класса в коллекцию?
Есть задание - создать класс и организовать коллекцию,которая будет хранить объекты класса.
Создал класс(вне методов и конструктора, вынесены счётчик и коллекция для хранения объектов класса)
import math
import collections
import datetime
class Bookorder:
kolvorder = 0 #Будет считать количество заказчиков книг
bookorders = [] #Коллекция где будут хранится объекты класса
def __init__(self,surnm,dateorder,datetakeorder):
"""Инициализация атрибутов класса - фамилия,дата заказа книги,дата выдачи книги"""
self.surnm = input('Фамилия заказчика книг: ')
self.dateorder = input('Дата заказа книги(гггг-мм-дд): ')
self.dateorder = time.strptime(input('Дата заказа книги(дд-мм-гггг): '), "%d.%m.%Y")
self.datetakeorder = time.strptime(input('Дата выдачи заказа книги(дд-мм-гггг): '), "%d.%m.%Y")
Далее реализовал функцию вывода всех,уже добавленных объектов.
def showallbookorders(self):
"""Вывод всех экземпляров класса из коллекции"""
#bookorder = Bookorder()
for bookorder in bookorders:
print(Bookorder.surnm, Bookorder.dateorder, Bookorder.datetakeorder)
Основной вопрос стоит в реализации Вот главный блок программы. Здесь введена переменная quant,которая у пойдёт в цикл,то есть хотим ввести 25 записей, то пишем 25,и работает цикл на ввод 25 записей
quant=int(input("Сколько экземпляров класса хотите создать"))
for x in range(quant):
bookorder = Bookorder()
bookorders.append(bookorder)
kolvoorder+=1
Компилятор требует,чтобы всё равно были указаны атрибуты класса,но я их хочу ввести с клавиатуры,а не константно.
Отсюда и ошибки, которые указывают что нужно в объект класса добавить атрибуты класса.
Traceback (most recent call last):
TypeError: __init__() missing 3 required positional arguments: 'surnm', 'dateorder', and 'datetakeorder'
Ответы (1 шт):
измените сигнатуру __init__ на эту:
def __init__(self)
Т.е. должно получиться так:
class Bookorder:
kolvorder = 0 #Будет считать количество заказчиков книг
bookorders = [] #Коллекция где будут хранится объекты класса
def __init__(self):
"""Инициализация атрибутов класса - фамилия,дата заказа книги,дата выдачи книги"""
self.surnm = input('Фамилия заказчика книг: ')
self.dateorder = input('Дата заказа книги(гггг-мм-дд): ')
self.dateorder = time.strptime(input('Дата заказа книги(дд-мм-гггг): '), "%d.%m.%Y")
self.datetakeorder = time.strptime(input('Дата выдачи заказа книги(дд-мм-гггг): '), "%d.%m.%Y")