Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
1

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

11.05.2015, 23:47. Показов 1481. Ответов 3

Author24 — интернет-сервис помощи студентам
Как сделать красивее код ниже ( код одной из моделей в базе данных, использую орм peewee( алхимия для моих целей слишком большая)).
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Rating(BaseModel):
# тут описываются поля модели ( столбцы базы данных
    win = IntegerField(default=0)
    lose = IntegerField(default=0)
    win_network = IntegerField(default=0)
    lose_network = IntegerField(default=0)
    win_last = BooleanField(default=True)
    win_lose_seq = TextField(default='1, 2, 3:::1,2,3')
    player = ForeignKeyField(Player, related_name='rating')
 
# передаем нужно ли использовать значения по умолчанию, если нет - используем значения переданные дальше
    def __init__(self, defaults=True, _win=None, _lose=None, _win_network=None,
                 _lose_network=None, _win_last=None, _win_lose_seq=None,
                 _player=None,
                 *args, **kwargs):
        super(Rating, self).__init__(*args, **kwargs)
        if not defaults:
            self.win = _win
            self.lose = _lose
            self.win_network = _win_network
            self.lose_network = _lose_network
            self.win_last = _win_last
            self.win_lose_seq = _win_lose_seq
            self.player = _player
Код выглядит громоздко, а если учесть что моделей 8 штук, то это дело становится печальным. Можно ли сделать короче?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2015, 23:47
Ответы с готовыми решениями:

Шаблонный класс (конструктор по умолчанию, основной конструктор и конструктор копирования; перегрузить операторные функции)
5.1. Разработать шаблонный класс Set. Класс должен содержать конструктор по умолчанию, основной...

Конструктор запросов к базе данных
Здравствуйте! Есть база данных состоящая из таблицы со множеством полей, а также форма клиентского...

Использование классов (Описать конструктор по умолчанию, конструктор с параметром, деструктор...)
Помогите переделать программу, чтобы в ней использовались классы. Описать конструктор по...

Добавление фотографии по умолчанию сотруднику в базе данных
Ребят как сделать так что бы после добавление ФИО в базу данных у него появлялась фотография по...

3
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
12.05.2015, 09:07 2
А стоит ли?
Во-первых, короче значит негибче.
Во-вторых, можно объединить ваши параметры в один класс или словарь, если они всегда идут скопом.
И хранить тоже в словаре. Но потеряете преимущество описанных полей.
В общем, выше головы не прыгнешь.
1
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
12.05.2015, 13:23 3
Не гонясь за простотой, мне в сигнатуре метода не нравится само наличие параметра default. Избыточно. Если меня, как пользователя класса, устраивает дефолт, то я опускаю параметры. Если не устраивает дефолт, то я пишу их. А тут получается я могу передать параметры, но оставить defaults=True и поведение будет удивлять.

Я бы предложил убрать defaults, а тело __init__ переписать в виде:
Python
1
self.win = _win or self.win
Я же правильно понимаю, что к моменту установки значений полей класса они уже корректно проинициализированы в базовом классе? По крайней мере, это ожидаемое и логичное поведение.
1
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
12.05.2015, 22:22  [ТС] 4
0x10, спасибо, уже воспользовался вашим советом. Честно говоря и не подумал, что так можно.
dondublon, ваш совет тоже во внимание принял.
Оставлю в таком виде + уберу defaults. Вопрос впринципе решен. Будут у кого еще мысли - пишите сюда.
0
12.05.2015, 22:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2015, 22:22
Помогаю со студенческими работами здесь

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1)...

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по...

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Конструктор с параметрами И конструктор по умолчанию. Как?
Опять прошу совета. Выполняю тут из интернета задания. Класс надо создать, там будут конструкторы и...

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать...

Предусмотреть в классе родовой конструктор по умолчанию, родовой конструктор копирования и операцию присвоения
как написать родовой конструктор копирования и оператор присваивания #include <iostream>...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru