Комментарии:
Спасибо! Очень понятно объясняете, сразу всё ясно
ОтветитьБесполезная хрень
Только кода больше
.
Написали одно потом написали второе в итоге и то и другое есть.
А вообще - странная конструкция получается. Приватные атрибуты подразумевают отсутствие доступа к ним извне. Но мы делаем "property", в результате чего получаем доступ к приватным атрибутам извне. Т.е. делам приватный атрибут публичным.
ОтветитьНормально! На других каналах, где повествуется эта тема, вообще ничего не понять.
Ответитькласс
ОтветитьЕсли кому-то сложно освоить материал, что-то не получается, то лучше отдохнуть и вернуться к этому уроку через время
Это должно помочь
👍👍👍👍
спасибо за урок
все супер, доступно и понятно. спасибо. но почему не Age, а Old?))
ОтветитьОтличное видео! Но остались вопросы. Ваш пример с Window (приведённый под другим комментарием). Нельзя ли вместо property использовать магический метод __set_attr__, в котором мы будем проверять, какое свойство мы изменяем, и если это width или height, то, соответственно, делаем то что надо. Заранее спасибо)
ОтветитьНевероятно простая подача сложного материала все понятно! Спасибо!
ОтветитьЗачем делать атрибут приватным, чтобы потом сделать пубоичным, каким он был изначально?
ОтветитьСпасибо!
ОтветитьПочему когда мы обращаемся к сеттеру, через оператор присваивания = происходит вызов функции. У меня одно объяснение он переопределен в классе property и выполняет другое действие как скобочки (). По аналогии с переопределением __add__, когда + будет делать заданный функционал а не сложение/конкатенацию. Я прав?
ОтветитьПолучается, к методам с одинаковым именем применяются разные декораторы, которые делают из метода объект property. Интерпретатор понимает какой метод исполнять, в зависимости какой оператор был использован: оператор присвоения – setter, оператор del – deleter, без оператора – getter?
Ответитьна данный момент не понятно почему нужно использовать приватные атрибуты, если их можно спокойно изменять при помощи сеттера или проперти?
Ответитьвсе равно не понимаю, зачем мы запрещаем программисту обращаться к свойствам объекта напрямую:
p.old
а потом городим еще кучу строчек, чтобы он все-таки потом мог обращаться к свойствам объекта визуально и по сути будто напрямую:
p.old
Почему бы нам сразу не разрешить ему иметь доступ к свойству напрямую?
Проще гораздо работать напрямую через set и get, плюс добавив docstring
Реализация через property существенно усложняет сопровождение кода
не очень все-таки понятно зачем нужен этот декоратор. Получается, что с помощью него осуществляется доступ к защищенным свойствам. Но можно просто убрать двойное нижнее подчеркивание впереди и получится тот же эффект, без нагромождения сеттеров и геттеров. Разве что в самих этих функциях можно вставлять дополнительные условия проверки на присвоение определенных значений.
ОтветитьУ меня пиявились знания )
ОтветитьДень добрый, уважаемый Сергей есть вопрос. А property в 5 подвиге нам пришлось как бы дублировать отдельно для width и height тоесть получилось для одного сетер и гетер и для другого сетер и геттер а нельза было для двух обьектов-свойств записать один геттер и сеттер или для каждого объекта свойства должен быть отдельный геттер и сеттер?
ОтветитьРекомендую тем кто в замешательстве, как был я паралельно клацать в пайчарме и пробовать, а то столько всего в ООП что уже теряешь себя в пространстве)
ОтветитьСергей, благодарю!! 👍🔥
Ответитьспасибо!!
Ответитьспасибо!
ОтветитьПотрясающе!
ОтветитьПора изменить название канала на Супер препод!
ОтветитьЗачем делать два различных сеттера и геттера для двух приватных атрибутов? Разве мы не можем изменять и получать их оба через один сеттер/геттер?
ОтветитьCпасибо за отличный курс. Если есть ещё здесь старички как я, то за шестёрёнкой на видео можно понизить скорость до 0.75, как я делаю ;)
Ответитьу Вас талант к преподаванию, весь материал излагаете последовательно и доходчиво
ОтветитьДобрый день.
Вопрос, касающийся свойства property.
Правильно ли я понимаю, что имеет значение порядок методов, указанных в свойстве property:
на первом месте всегда метод, обеспечивающий получение значения атрибута,
на втором - метод для задания значения атрибута,
на третьем - метод для удаления значения атрибута,
на четвертом - строка, содержащая документацию?
property(getx, setx, delx, "I am the property.")
И при изменении значения атрибута интерпретатор понимает, что необходимо вызвать метод, указанный на второй позиции свойства property,
при зачитывании значения атрибута - метод, указанный на первой позиции свойства property
и т.д. ?
Посмотрел 4 минуты и не понимаю, в чём практический/сакральный/иной смысл этих манипуляций?
Сначала мы сделали атрибуты приватными, затем расприватили их, чтобы иметь возможность обращаться к ним.
Для чего?
print(class_name.__dict__) показывает все наши "приватные" данные
Единственное, что удобно = old = property(get_old, set_old), как дальнейшее использование чтения/записи используя прдемонстрированный в видео подход.
Но стоит ли оно того, чтобы каждый раз это прописывать?
Как же шикарно все объяснено, просто по полочкам. Респект!!!
ОтветитьОтличный урок, все просто и понятно..Спасибо большое !
Ответитьодно через другое через третье, фиг знает что., А где бл... постулаты пайтона - явное лучше неявного, Простое - лучше сложного. вопрос - нахера тьак все усложнять , мало вижу пользы в этом все по итогу Только голову ломать
ОтветитьПосле стиля C# стиль ООП пихтона смотрится конечно дико
ОтветитьАвтор, желаю тебе миллион подписчиков за втой труд!
ОтветитьДекоратор очень полезный, сокращает количество кода. Уже испробовал в модели Django проекта.
ОтветитьКасаемо функционального дублирования. Почему бы вместо докорирования геттеров и сеттеров не сделать сами геттеры и сеттеры приватными, и передавать в объект property приватные геттеры и сеттеры?
ОтветитьЗдравствуйте, много где облазил - ничего не нашел. Надеюсь вы ответите.Почему мы не можем просто сразу создать метод private, почему нужно создавать публичный, а потом в нем делать return private. Вот допустим:
@property
def lvl(self):
return self.__lvl, f'{dt.now() - self.__born}'
@lvl.setter
def lvl(self,numer):
self.__lvl += numer
Почему нельзя сразу создать def __lvl(self)?
Заранее спасибо!
"Если в классе задан атрибут как объект-свойство, то в первую очередь выбирается оно...", a как тогда обратиться к локальному атрибуту с таким же именем?
ОтветитьВсего один сеттер и все, тебе уже 35
ОтветитьЧто такое объект свойства, в этой теме про него говорят, но я никак не могу понять
ОтветитьСергей, можно ли через property setter изменять два атрибута одновременно, например имеем две стороны прямоугольника А и В. В примере у Вас нужно делать свойство на каждый атрибут, а чисто логично бы сделать одной свойство к на обе стороны прямоугольника... Спасибо заранее.
ОтветитьНемного не понял вот этого:
old = property()
old = old.setter(set_old)
old = old.getter(get_old)
Разве мы каждой строчкой не переопределяем атрибут old?
спасибо) но если можно чуть помедленнее
Ответить