Я вижу, что ваши сеттеры просто регистрируют сообщение, а затем просто присваивают значение - на самом деле ваш принятый ответ только присваивает значение. Используете ли вы этот шаблон, потому что это принятая практика/обычная мудрость на каком-то другом языке, возможно, имя, начинающееся с буквы «J»? Если это так, то, пожалуйста, узнать, что Pythonic подход к этой же конструкции является намного проще:
class Of2010(object):
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
Нет ничегонеделания сеттеры, никакой промежуточной функции не требует только, чтобы присвоить значение. "Что ты говоришь? «Публичное воздействие переменных-членов? !!» Хорошо, есть фактически.
Посмотрите на эти классы с точки зрения кода клиента. Чтобы использовать класс, клиенты создать объект, а затем присвоить свойство «а» с помощью:
obj = Of2010()
obj.a = 42
Примечательно, что это тот же самый код для класса 5-вкладыша я написал выше.
Почему J-язык поощряет более многословный стиль собственности? Сохранение интерфейса класса в случае будущих изменений требований. Если в какой-то момент времени некоторое другое значение объекта должно измениться вместе с любыми изменениями в a, тогда вы должны реализовать механизм свойств. К сожалению, J-язык раскрывает характер механизма доступа атрибутов к клиентскому коду, так что введение свойства в какой-то момент в будущем представляет собой навязчивую задачу рефакторинга, которая потребует перестройки всех клиентов, которые используют этот класс и его атрибут «a».
В Python это не тот случай. Доступ к атрибуту «a» объекта определяется во время выполнения в вызывающем. Поскольку прямой доступ и доступ к свойствам «выглядят» одинаково, ваш класс Python сохраняет этот интерфейс, даже если фактический механизм отличается. Важно то, что он идентичен в отношении кода клиента.
Таким образом, в Java, один вводит эту сложность права собственности с момента создания этого класса (и в самом деле, общепринятая практика, из всех классов), на авось, что это может стать необходимым когда-нибудь в будущее. С Python можно начать с реализации Simplest Thing, которая могла бы работать, т. Е. Прямого доступа к простым переменным-членам, оставляя сложный подход на время в будущем, что дополнительный материал действительно необходим и имеет ценность. Поскольку этот день, возможно, никогда не наступит, это огромный шаг вперед в получении этой первой рабочей версии вашего кода в дверь.
Это свойство (fset = ...), но в противном случае я бы использовал что-то подобное. – olt
@olt: Спасибо, исправлено. –