Метод как свойство объекта в Python


Всё-таки Python красивый язык. Свойство объекта может быть определено как специальный метод экземпляра объекта. Практически это позволяет обращаться к свойству как по имени, так и с помощью метода (getter или setter, или и то и другое в зависимости от операции). Кроме того, такие обращения к методу позволяют при получении и установке свойств выполнять дополнительные операции, например изменять счётчик обращений к свойству объекта.



class MyClass(object):

   def get_a(self):
      return self._a + 1

   def set_a(self, value):
      self._a = value - 1

   a = property(get_a, set_a, doc="Off by one a")

Начиная с Python 2.6 можно использовать декораторы @property и @setter, и сделать код ещё красивее:

# Python 2.6 style
class MyClass(object):
   
   @property
   def a(self):
      return self._a + 1
   
   @a.setter #makes the property writeable
   def a(self, value):
      self._a = value - 1