Используя получают/устанавливают, кажется, обычная практика в Java (по различным причинам), но я едва вижу, что Python кодирует, который использует это.
Почему Вы используете или избегаете, добираются/методы установки в Python?
Классная ссылка: Python - это не Java :)
В Java вы должны использовать геттеры и сеттеры, потому что использование публичных полей не дает вам возможности вернуться и передумать позже, чтобы использовать геттеры и сеттеры. Так что в Java лучше заранее избавиться от этой обязанности. В Python это глупо, потому что вы можете начать с обычного атрибута и изменить свое решение в любой момент, не затрагивая ни одного клиента класса. Поэтому не пишите геттеры и сеттеры.
В python вы можете просто получить доступ к атрибуту напрямую, потому что он общедоступен:
class MyClass:
def __init__(self):
self.my_attribute = 0
my_object = MyClass()
my_object.my_attribute = 1 # etc.
Если вы хотите сделать что-то с доступом или мутацией атрибута, вы можете использовать свойства:
class MyClass:
def __init__(self):
self._my_attribute = 0
@property
def my_attribute(self):
# Do something if you want
return self._my_attribute
@my_attribute.setter
def my_attribute(self, value):
# Do something if you want
self._my_attribute = value
Что важно, код клиента остается тем же.
Краткий ответ на ваш вопрос: нет, при необходимости вы должны использовать свойства. Райан Тамиоко дает подробный ответ в своей статье Геттеры / сеттеры / фуксоры
. Основная ценность, которую следует извлечь из всего этого, - это стремление к тому, чтобы каждая строка кода имела какое-то значение или значение для программист. Языки программирования предназначены для людей, а не для машин. Если у вас есть код, который выглядит так, как будто он не делает ничего полезного, его трудно читать или кажется утомительным, то велики шансы, что в Python есть какая-то языковая функция, которая позволит вам удалить его.
Вот что об этом говорит Гвидо ван Россум в Masterminds of Programming
Что вы имеете в виду под «борьбой с языком»?
Гвидо: Обычно это означает, что они пытаются продолжить свои привычки, которые хорошо работали с другим языком.
[...] Люди превратят все в класс и превратят каждый доступ в метод доступа ,
где это действительно неразумно делать в Python; у вас будет более подробный код, который
труднее отлаживать и работает намного медленнее. Вы знаете выражение "Вы можете написать ФОРТРАН на любом языке?" Вы также можете писать Java на любом языке.
Ваше наблюдение верно. Это необычный стиль программирования на Python. Все атрибуты являются общедоступными, поэтому вы просто получаете к ним доступ (получаете, устанавливаете, удаляете), как если бы вы использовали атрибуты любого объекта, у которого они есть (а не только классов или экземпляров).Легко сказать, когда Java-программисты изучают Python, потому что их код Python выглядит как Java с использованием синтаксиса Python!
Я определенно согласен со всеми предыдущими плакатами, особенно ссылкой @ Максимилиано на знаменитую статью Филиппа и предположением @ Max о том, что использовать что-либо более сложное, чем стандартный способ установки (и получения) атрибутов класса и экземпляра, Свойства (или дескрипторы, чтобы еще больше обобщить) для настройки получения и настройки атрибутов! (Это включает возможность добавлять свои собственные индивидуализированные версии частной, защищенной, дружественной или любой другой политики, которую вы хотите, если вы хотите чего-то другого, кроме общедоступного.)
В качестве интересной демонстрации в Core Python Programming (глава 13, раздел 13.16) я придумал пример использования дескрипторов для хранения атрибутов на диске, а не в памяти !! Да, это странная форма постоянного хранилища, но она действительно показывает вам пример того, что возможно!
Вот еще одно связанное сообщение, которое также может оказаться полезным: Python: несколько свойств, один установщик / получатель
Нет, это непифонично. Общепринятым способом является использование обычных атрибутов данных и замена атрибутов, требующих более сложной логики получения / установки, на свойства.