Использование get / set кажется обычной практикой в Java (по разным причинам), но я почти не вижу кода Python, который использует это.
Почему вы используете или избегаете методов get / set в Python?
python
getter-setter
Roger Pate
источник
источник
Ответы:
Прикольная ссылка: Python - это не Java :)
источник
В 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
Важно отметить, что код клиента остается прежним.
источник
Вот что об этом говорит Гвидо ван Россум в своей книге «Masterminds of Programming».
источник
Нет, это непифонично. Общепринятым способом является использование обычных атрибутов данных и замена атрибутов, требующих более сложной логики получения / установки, на свойства.
источник
Короткий ответ на ваш вопрос: нет, при необходимости вы должны использовать свойства. Райан Тамиоко дает подробный ответ в своей статье Getters / Setters / Fuxors.
источник
Ваше наблюдение верно. Это необычный стиль программирования на Python. Все атрибуты являются общедоступными, поэтому вы просто получаете к ним доступ (получаете, устанавливаете, удаляете), как и с атрибутами любого объекта, у которого они есть (а не только классов или экземпляров). Когда Java-программисты изучают Python, легко определить, потому что их код Python выглядит как Java с использованием синтаксиса Python!
Я определенно согласен со всеми предыдущими плакатами, особенно ссылкой @ Maximiliano на знаменитую статью Филиппа и предположением @ Max о том, что для чего-то более сложного, чем стандартный способ установки (и получения) атрибутов класса и экземпляра, является использование свойств (или дескрипторов, чтобы обобщить еще больше) для настройки получения и настройки атрибутов! (Это включает в себя возможность добавлять свои собственные индивидуализированные версии частной, защищенной, дружеской или любой другой политики, которую вы хотите, если вы хотите чего-то другого, кроме общедоступной.)
В качестве интересной демонстрации в Core Python Programming (глава 13, раздел 13.16) я придумал пример использования дескрипторов для хранения атрибутов на диске, а не в памяти !! Да, это странная форма постоянного хранения, но это действительно показать вам пример того , что можно!
Вот еще один связанный пост, который также может оказаться полезным: Python: несколько свойств, один установщик / получатель
источник
Я пришел сюда за этим ответом (к сожалению, не смог). Но я нашел работу в другом месте. Этот приведенный ниже код может быть альтернативой для get .
class get_var_lis: def __init__(self): pass def __call__(self): return [2,3,4] def __iter__(self): return iter([2,3,4]) some_other_var = get_var_lis
Это просто обходной путь . Используя вышеупомянутую концепцию, вы можете легко создать методологию получения / установки и в py.
источник
Наш учитель показал в классе один пример, объясняющий, когда нам следует использовать функции доступа.
class Woman(Human): def getAge(self): if self.age > 30: return super().getAge() - 10 else: return super().getAge()
источник