@Panda_Code
Сognizer

Зачем нужны сеттеры в Python?

class Critter:

    def __init__(self, name):
        self.__name = name

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, name):
        if name == " ":
            print("Can`t be an empy")
        else:
            self.__name = name


dog = Critter("")
print(dog.name)


Скажите, смысл в модификаторе доступа и сеттерах, если я могу все равно задать отрицательное значение через конструктор???
В Java, к private ты имеешь доступ только через сеттеры и геттеры, а тут, ты меняешь значение, даже так
dog.name = "Вася"
  • Вопрос задан
  • 2455 просмотров
Решения вопроса 1
@deliro
Сеттеры и геттеры для плохих программистов. В питоне они не нужны. В джаве они тоже не нужны.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@AstraVlad
Финансист, консультант, программист-любитель
Смысл не в том, чтобы прогер не мог выстрелить себе в ногу -- если захочет, то выстрелит, а в том, чтобы в нормальных условиях можно было проверить в ту ли ногу он стреляет, заменить при необходимости картечь на пулю на лету или вообще тихо аннулировать выстрел. А это бывает нужно, особенно если учесть, что поля объекта совсем не обязаны быть переменными-примитивами, спокойно лежащими в куче. Или могут ВНЕЗАПНО перестать ими быть по мере развития продукта.

У меня иногда тоже бывает что когда пишу "правильно", разделяя уровни абстракции и всячески инкапсулируя, приходит в голову мысль: "А нафига? Можно же сделать проще." А потом через неделю-месяц-год приходится что-то переделывать и выясняется, что благодаря тому, что все сделано "по науке", можно поменять источник данных, скажем, с таблицы Эксель на локальном диске на Мускул, хостящийся за пол-мира от меня, за полчаса без малейшего напряга и изменения логики остальной части программы. И понимаешь, что ты, оказывается, не полный идиот :).
Ответ написан
Комментировать
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
а тут, ты меняешь значение, даже так

Да, меняешь, если есть сеттер. Удали его и получишь AttributeError.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы