Как стать автором
Обновить

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

property - это неочевидное поведение для программиста, использующего класс.

c.temperature = 1

выглядит как прямая перезапись атрибута 'temperature' объектом int(1)

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

А вот get/set это очевидные команды объекту с очевидной логикой.

Я бы вообще удалил properties из питона.

Присваивание c.temperature = 1 выглядит как присвоение 1 свойству temperature объекта c. То, что происходит какая-то перезапись атрибута — это ваши додумки, которые противоречат как реализации объектов в Питоне, так и общему принципу инкапсуляции.

Не мои, а автора?

На проверку в статье 4 совета. От себя добавлю пятый, для автора: не привирай.

Одним из самых используемых встроенных декораторов является @property. Множетсво ООП языков(Java, С++) предоставляют возможность использовать геттеры и сеттеры. Данные функции используются с целью гарантировать, что наша переменная не вернет/установит некорректное значение.

Для С++ в том виде, в котором это подразумевается в статье - это не верно. Путаница с Borland C++Builder

temp = 0
def decorator_1(func):
  print('Running our function')
  return func
def temperature():
  return temp
decorator_1(temperature())



Где здесь декоратор? Ниже вы приводите определение декоратора как функции, которая в качестве аргумента принимает другую функцию. Это конечно не всё определение. Но этот пример даже данное условие не выполняет.
ps: обращаюсь к вам так как принимая решение о переводе вы также берёте на себя часть ответственности за содержание
pss: не смотря на то что я уважаю чужой труд, считаю бессмысленные статьи(и их переводы) только создают информационный шум

Пересмотрите код. Данное условие он как раз выполняет. Берет за аргумент другую функцию.

вызов функции temperature происходит до её передачи в декоратор. Т.е в декоратор придёт уже результат выполнения функции.
Вы это легко можете проверить выполнив в теле декоратора
print(type(func))

и тогда весь смысл декораторов теряется.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации