Форум сайта python.su
0
Здравствуйте. Вопрос неопытного человека. Не пинайте сильно.
Подскажите правильно ли я понимаю как мне составить класс.
Допустим у меня есть класс работника, Все данные берутся с БД и туда же сохраняются.
У работника очень много данных(в примере только четверть)
Как я это вижу.
class Worker: """"Класс работника""" def __init__(self, _id=None): self.id = None self.first_name = None self.last_name = None self.middle_name = None self.sex = None self.date_Birth = None self.phone = None self.address = None self.birthplace = None self.note = None # ... и так далее if _id: self.get_sql_info() def get_sql_info(self): # тут запрос к базе данных и получение значений self.id = sql_result[0] self.first_name = sql_result[1] self.last_name = sql_result[2] self.middle_name = sql_result[3] self.sex = sql_result[4] self.date_Birth = sql_result[5] self.phone = sql_result[6] self.address = sql_result[7] self.birthplace = sql_result[8] self.note = sql_result[9] # ... и так далее def save_sql_info(self): # Тут происходит сохранение информации в базу # ... Дальнейшие методы
Офлайн
1
То, что вы пытаетесь изобрести, изобретено сто лет назад и называется ORM, реализаций есть куча.
А концептуально… Ну вот лично вас не бесит функция, которая называется get_lalala, но при этом она ничего не возвращает?
Офлайн
0
Про ORM знаю. Просто я сейчас хочу разобраться.
Про названия согласен) звучит тупо.
Но сама реализация правильная?
Офлайн
1
Так вы же ничего еще не реализовали, вот прям вообще ничего. Что мы должны обсуждать, присваивание переменных?
Офлайн
857
MellerНадо сделать структуру рабочего, в которой хранятся только данные. А чтение и запись из базы и в базу должны быть в другом исполнителе, который при чтении из базы возвращает заполненного рабочего (читает данные, создаёт рабочего, заполняет его данными и возвращает его), а при сохранении в базу принимает рабочего.
Но сама реализация правильная?
Офлайн
0
py.user.nextВроде я вас понял, тогда класс будет выглядеть примерно так ?
Надо сделать структуру рабочего, в которой хранятся только данные. А чтение и запись из базы и в базу должны быть в другом исполнителе, который при чтении из базы возвращает заполненного рабочего (читает данные, создаёт рабочего, заполняет его данными и возвращает его), а при сохранении в базу принимает рабочего.
class Worker: """"Класс работника""" def __init__(self, _id, first_name, last_name, middle_name, sex, date_Birth,... ): self.id = _id self.first_name = first_name self.last_name = last_name self.middle_name = middle_name self.sex = sex self.date_Birth = date_Birth # ... и так далее
Отредактировано Meller (Ноя. 8, 2018 11:18:05)
Офлайн
1
Meller
А чем ваш класс лучше простого словаря? Что он даёт?
Офлайн
857
MellerВ этом классе можешь писать только операции для этого типа. Например, сравнить двух работников, вычислить коэффициент работника и тому подобное, строковое представление для вывода на экран. Откуда он берётся и куда он сохраняется, он знать не должен. А дальше ты строишь машину, которая работает с работниками, которая и умеет сохранять их и загружать, и таких машин может быть много.
Получается к этому классу нужно дописать отдельный класс для получения готового заполненного экземпляра работника из базы данных и для записи?
Офлайн
0
Papa_SvinДа это только начало класса, понятно что дальше будет куча методов.
MellerА чем ваш класс лучше простого словаря? Что он даёт?
py.user.next
В этом классе можешь писать только операции для этого типа. Например, сравнить двух работников, вычислить коэффициент работника и тому подобное, строковое представление для вывода на экран. Откуда он берётся и куда он сохраняется, он знать не должен. А дальше ты строишь машину, которая работает с работниками, которая и умеет сохранять их и загружать, и таких машин может быть много.
Офлайн