Size: a a a

Сообщество Python Программистов

2020 November 25

АА

Александр Алексюк... in Сообщество Python Программистов
Если ты про джангу, то лучше не переопределяй конструктор в классе модели
Эт понятно, не нужно лезть и править что-то во фреймворке. Просто я сначала учу, что нужно при наследовании юзать super(), а в джанге тож классы, тож наследование, но super() не нужен и у меня несостыковка
источник

VA

Vadim Apenko in Сообщество Python Программистов
Ivan Karniyenka
не нулевые
all(['qwe','bpr'])
источник

АА

Александр Алексюк... in Сообщество Python Программистов
Александр Алексюк
Эт понятно, не нужно лезть и править что-то во фреймворке. Просто я сначала учу, что нужно при наследовании юзать super(), а в джанге тож классы, тож наследование, но super() не нужен и у меня несостыковка
Может это с какой-то определенной версии? Тогда будет ясно, книжка рассказывает про дражгу 1.8 и может в актуальной версии питона так надо было
источник

𝕬

𝕬𝖗𝖙𝖊𝖒 in Сообщество Python Программистов
Александр Алексюк
гайс, почему когда я создаю класс в models.py на жанге, я не пишу super.__init__, как меня учили в книжке в теме наследование классов?
В Джанге супер не нужно делать для наследования.
источник

in Сообщество Python Программистов
Александр Алексюк
Эт понятно, не нужно лезть и править что-то во фреймворке. Просто я сначала учу, что нужно при наследовании юзать super(), а в джанге тож классы, тож наследование, но super() не нужен и у меня несостыковка
Нужно только если ты переопределяешь конструктор в потомке
источник

𝕬

𝕬𝖗𝖙𝖊𝖒 in Сообщество Python Программистов
𝕬𝖗𝖙𝖊𝖒
В Джанге супер не нужно делать для наследования.
По крайней мере, начиная с 2.2 точно, раньше не знаю
источник

E

Egor in Сообщество Python Программистов
Александр Алексюк
То есть super() нахуй не надо?
супер нужен для обращения к атрибутам отцовского класса. если тебе не нужно ничего в них добавлять, а просто сохранить так, как они там и есть, то ты просто их наследуешь
источник

E

Egor in Сообщество Python Программистов
или в жанге что-то особенное?
источник

in Сообщество Python Программистов
Egor
супер нужен для обращения к атрибутам отцовского класса. если тебе не нужно ничего в них добавлять, а просто сохранить так, как они там и есть, то ты просто их наследуешь
Если у него инит переопределяется в потомке, то инит родителя не выполнится
источник

E

Egor in Сообщество Python Программистов
Если у него инит переопределяется в потомке, то инит родителя не выполнится
да
источник

in Сообщество Python Программистов
Как я тут показал
источник

in Сообщество Python Программистов
Если очень хочется, то так:
class MyModel(Model):
 def __init__(self, *args, *kwargs):
   # your stuff here
   super(MyModel, self).__init__(*args, **kwargs)
Так что если не хочешь потерять конструктор родителя, то делай так 👆
источник

АА

Александр Алексюк... in Сообщество Python Программистов
Нужно только если ты переопределяешь конструктор в потомке
Я понял. Получается в книжке просто дали более подробную конструкцию для наглядности и в супер не переопредили конструктор, а указали то же самое. Резюмируя:

1. Если не переопределяешь конструктор родительского класса в классе потомке — супер можно не использовать.
2. Непонимание возникло не из-за версий питона/жанги, а из-за не правильного понимания книжки.
3. Если нужно переопределять конструктор класса-потомка и добавить новый атрибут — через супер переопределяешь нужные атрибуты класса-родителя + новый атрибут класса-потомка.

Всё так понял?
источник

𝕬

𝕬𝖗𝖙𝖊𝖒 in Сообщество Python Программистов
Egor
или в жанге что-то особенное?
class A(models.Model):
   b = models.TextField()

Class C(A):
   d = models.IntegerField()

f = C.objects.create(b='jopa', d=1)
print(f.b, f.d) # 'jopa', 1
источник

in Сообщество Python Программистов
Так что если не хочешь потерять конструктор родителя, то делай так 👆
Только с какой-то версии питона можно писать по-другому:
super().__init__()
источник

in Сообщество Python Программистов
Александр Алексюк
Я понял. Получается в книжке просто дали более подробную конструкцию для наглядности и в супер не переопредили конструктор, а указали то же самое. Резюмируя:

1. Если не переопределяешь конструктор родительского класса в классе потомке — супер можно не использовать.
2. Непонимание возникло не из-за версий питона/жанги, а из-за не правильного понимания книжки.
3. Если нужно переопределять конструктор класса-потомка и добавить новый атрибут — через супер переопределяешь нужные атрибуты класса-родителя + новый атрибут класса-потомка.

Всё так понял?
в супер не переопредили конструктор
написал фигню)
источник

T

Tuum Daemonia in Сообщество Python Программистов
А если ты не переопределил конструктор родителя, у тебя нет инита, то потомки твоего класса будут ли по super получать конструктор твоего родителя?
источник

АА

Александр Алексюк... in Сообщество Python Программистов
в супер не переопредили конструктор
написал фигню)
Ну то есть переопределил, но на тож самое. Да?)
источник

in Сообщество Python Программистов
Александр Алексюк
Ну то есть переопределил, но на тож самое. Да?)
Ты можешь в потомке переопределить конструктор.

А добавлять туда вызов конструктора родителя - это зависит от твоей цели
источник

АА

Александр Алексюк... in Сообщество Python Программистов
Ты можешь в потомке переопределить конструктор.

А добавлять туда вызов конструктора родителя - это зависит от твоей цели
Спасибо!
источник