#9. Свойства property. Декоратор @property | Объектно-ориентированное программирование Python

#9. Свойства property. Декоратор @property | Объектно-ориентированное программирование Python

selfedu

2 года назад

86,227 Просмотров

Ссылки и html тэги не поддерживаются


Комментарии:

@ned.sergio8454
@ned.sergio8454 - 01.12.2023 16:08

Спасибо! Очень понятно объясняете, сразу всё ясно

Ответить
@Putiny_Pizda
@Putiny_Pizda - 18.11.2023 13:15

Бесполезная хрень
Только кода больше
.
Написали одно потом написали второе в итоге и то и другое есть.

Ответить
@user-qd5zh2qi9j
@user-qd5zh2qi9j - 29.10.2023 01:19

А вообще - странная конструкция получается. Приватные атрибуты подразумевают отсутствие доступа к ним извне. Но мы делаем "property", в результате чего получаем доступ к приватным атрибутам извне. Т.е. делам приватный атрибут публичным.

Ответить
@user-qd5zh2qi9j
@user-qd5zh2qi9j - 29.10.2023 01:09

Нормально! На других каналах, где повествуется эта тема, вообще ничего не понять.

Ответить
@random_act
@random_act - 26.09.2023 11:29

класс

Ответить
@alenwar5123
@alenwar5123 - 18.09.2023 15:11

Если кому-то сложно освоить материал, что-то не получается, то лучше отдохнуть и вернуться к этому уроку через время
Это должно помочь

Ответить
@abdulloakramov7941
@abdulloakramov7941 - 21.08.2023 10:46

👍👍👍👍
спасибо за урок

Ответить
@AM-vr6ej
@AM-vr6ej - 20.08.2023 10:41

все супер, доступно и понятно. спасибо. но почему не Age, а Old?))

Ответить
@User_0512
@User_0512 - 05.08.2023 15:41

Отличное видео! Но остались вопросы. Ваш пример с Window (приведённый под другим комментарием). Нельзя ли вместо property использовать магический метод __set_attr__, в котором мы будем проверять, какое свойство мы изменяем, и если это width или height, то, соответственно, делаем то что надо. Заранее спасибо)

Ответить
@Blendershick
@Blendershick - 29.07.2023 11:27

Невероятно простая подача сложного материала все понятно! Спасибо!

Ответить
@user-bm1yl7xi6l
@user-bm1yl7xi6l - 09.07.2023 16:23

Зачем делать атрибут приватным, чтобы потом сделать пубоичным, каким он был изначально?

Ответить
@user-we3xm4uc4k
@user-we3xm4uc4k - 03.07.2023 18:22

Спасибо!

Ответить
@user-yh7gc7lt1r
@user-yh7gc7lt1r - 17.06.2023 17:57

Почему когда мы обращаемся к сеттеру, через оператор присваивания = происходит вызов функции. У меня одно объяснение он переопределен в классе property и выполняет другое действие как скобочки (). По аналогии с переопределением __add__, когда + будет делать заданный функционал а не сложение/конкатенацию. Я прав?

Ответить
@iamkhaidarzakirov
@iamkhaidarzakirov - 14.06.2023 10:04

Получается, к методам с одинаковым именем применяются разные декораторы, которые делают из метода объект property. Интерпретатор понимает какой метод исполнять, в зависимости какой оператор был использован: оператор присвоения – setter, оператор del – deleter, без оператора – getter?

Ответить
@iamkhaidarzakirov
@iamkhaidarzakirov - 14.06.2023 09:46

на данный момент не понятно почему нужно использовать приватные атрибуты, если их можно спокойно изменять при помощи сеттера или проперти?

Ответить
@johnmazepa
@johnmazepa - 10.06.2023 16:16

все равно не понимаю, зачем мы запрещаем программисту обращаться к свойствам объекта напрямую:
p.old

а потом городим еще кучу строчек, чтобы он все-таки потом мог обращаться к свойствам объекта визуально и по сути будто напрямую:
p.old

Почему бы нам сразу не разрешить ему иметь доступ к свойству напрямую?

Ответить
@Konstantin_Stalnov
@Konstantin_Stalnov - 08.06.2023 15:23

Проще гораздо работать напрямую через set и get, плюс добавив docstring
Реализация через property существенно усложняет сопровождение кода

Ответить
@user-rz7ko4rc5q
@user-rz7ko4rc5q - 16.05.2023 16:36

не очень все-таки понятно зачем нужен этот декоратор. Получается, что с помощью него осуществляется доступ к защищенным свойствам. Но можно просто убрать двойное нижнее подчеркивание впереди и получится тот же эффект, без нагромождения сеттеров и геттеров. Разве что в самих этих функциях можно вставлять дополнительные условия проверки на присвоение определенных значений.

Ответить
@alexandrmelnikov6434
@alexandrmelnikov6434 - 10.05.2023 23:15

У меня пиявились знания )

Ответить
@nomadicus77
@nomadicus77 - 25.04.2023 13:20

День добрый, уважаемый Сергей есть вопрос. А property в 5 подвиге нам пришлось как бы дублировать отдельно для width и height тоесть получилось для одного сетер и гетер и для другого сетер и геттер а нельза было для двух обьектов-свойств записать один геттер и сеттер или для каждого объекта свойства должен быть отдельный геттер и сеттер?

Ответить
@nomadicus77
@nomadicus77 - 24.04.2023 19:04

Рекомендую тем кто в замешательстве, как был я паралельно клацать в пайчарме и пробовать, а то столько всего в ООП что уже теряешь себя в пространстве)

Ответить
@user-sn9pv6vi7o
@user-sn9pv6vi7o - 09.04.2023 23:46

Сергей, благодарю!! 👍🔥

Ответить
@ZabytajaRussia
@ZabytajaRussia - 14.03.2023 21:28

спасибо!!

Ответить
@jamjam3337
@jamjam3337 - 07.02.2023 18:57

спасибо!

Ответить
@user-ee1lx1pe7n
@user-ee1lx1pe7n - 06.02.2023 13:47

Потрясающе!

Ответить
@agniusl
@agniusl - 22.01.2023 09:51

Пора изменить название канала на Супер препод!

Ответить
@CAHCrawlAdaptHide
@CAHCrawlAdaptHide - 18.01.2023 19:24

Зачем делать два различных сеттера и геттера для двух приватных атрибутов? Разве мы не можем изменять и получать их оба через один сеттер/геттер?

Ответить
@mihhail75
@mihhail75 - 14.01.2023 11:18

Cпасибо за отличный курс. Если есть ещё здесь старички как я, то за шестёрёнкой на видео можно понизить скорость до 0.75, как я делаю ;)

Ответить
@user-jc2dv3ht8n
@user-jc2dv3ht8n - 11.01.2023 14:06

у Вас талант к преподаванию, весь материал излагаете последовательно и доходчиво

Ответить
@user-ee2jn7ek9i
@user-ee2jn7ek9i - 29.12.2022 10:28

Добрый день.
Вопрос, касающийся свойства property.
Правильно ли я понимаю, что имеет значение порядок методов, указанных в свойстве property:
на первом месте всегда метод, обеспечивающий получение значения атрибута,
на втором - метод для задания значения атрибута,
на третьем - метод для удаления значения атрибута,
на четвертом - строка, содержащая документацию?

property(getx, setx, delx, "I am the property.")

И при изменении значения атрибута интерпретатор понимает, что необходимо вызвать метод, указанный на второй позиции свойства property,
при зачитывании значения атрибута - метод, указанный на первой позиции свойства property
и т.д. ?

Ответить
@span4ev
@span4ev - 05.11.2022 22:39

Посмотрел 4 минуты и не понимаю, в чём практический/сакральный/иной смысл этих манипуляций?
Сначала мы сделали атрибуты приватными, затем расприватили их, чтобы иметь возможность обращаться к ним.
Для чего?

print(class_name.__dict__) показывает все наши "приватные" данные

Единственное, что удобно = old = property(get_old, set_old), как дальнейшее использование чтения/записи используя прдемонстрированный в видео подход.
Но стоит ли оно того, чтобы каждый раз это прописывать?

Ответить
@qwertymegaforce9088
@qwertymegaforce9088 - 20.10.2022 10:28

Как же шикарно все объяснено, просто по полочкам. Респект!!!

Ответить
@vladimirastrelin1719
@vladimirastrelin1719 - 13.10.2022 14:11

Отличный урок, все просто и понятно..Спасибо большое !

Ответить
@user-sk4jp3ul4q
@user-sk4jp3ul4q - 09.09.2022 17:27

одно через другое через третье, фиг знает что., А где бл... постулаты пайтона - явное лучше неявного, Простое - лучше сложного. вопрос - нахера тьак все усложнять , мало вижу пользы в этом все по итогу Только голову ломать

Ответить
@viv81ster
@viv81ster - 07.08.2022 13:31

После стиля C# стиль ООП пихтона смотрится конечно дико

Ответить
@nailnail1000
@nailnail1000 - 02.08.2022 15:22

Автор, желаю тебе миллион подписчиков за втой труд!

Ответить
@fahrenheit1863
@fahrenheit1863 - 27.07.2022 10:47

Декоратор очень полезный, сокращает количество кода. Уже испробовал в модели Django проекта.

Ответить
@wasd1338
@wasd1338 - 26.07.2022 09:39

Касаемо функционального дублирования. Почему бы вместо докорирования геттеров и сеттеров не сделать сами геттеры и сеттеры приватными, и передавать в объект property приватные геттеры и сеттеры?

Ответить
@antonpinchuk9497
@antonpinchuk9497 - 10.07.2022 14:43

Здравствуйте, много где облазил - ничего не нашел. Надеюсь вы ответите.Почему мы не можем просто сразу создать метод 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)?
Заранее спасибо!

Ответить
@01011968Desgner
@01011968Desgner - 01.07.2022 07:35

"Если в классе задан атрибут как объект-свойство, то в первую очередь выбирается оно...", a как тогда обратиться к локальному атрибуту с таким же именем?

Ответить
@user-ox7kc4fd1m
@user-ox7kc4fd1m - 29.06.2022 10:34

Всего один сеттер и все, тебе уже 35

Ответить
@user-dt7ck8zv9l
@user-dt7ck8zv9l - 17.06.2022 15:18

Что такое объект свойства, в этой теме про него говорят, но я никак не могу понять

Ответить
@Grigorev84
@Grigorev84 - 22.04.2022 13:58

Сергей, можно ли через property setter изменять два атрибута одновременно, например имеем две стороны прямоугольника А и В. В примере у Вас нужно делать свойство на каждый атрибут, а чисто логично бы сделать одной свойство к на обе стороны прямоугольника... Спасибо заранее.

Ответить
@user-vb7zn7zf1o
@user-vb7zn7zf1o - 21.04.2022 18:45

Немного не понял вот этого:
old = property()
old = old.setter(set_old)
old = old.getter(get_old)
Разве мы каждой строчкой не переопределяем атрибут old?

Ответить
@sergioramos4562
@sergioramos4562 - 16.04.2022 16:26

спасибо) но если можно чуть помедленнее

Ответить