Python: вызвать функцию, если вызывается сеттер? - PullRequest
3 голосов
/ 28 июля 2011

У меня есть объект Python, который имеет определенные атрибуты, которые устанавливаются после вызова конструктора. Например,

def Student(object):
    def __init__(name, address=None):
        self.name = name
        self.address = address

stud = Student("John")
stud.address = "123 Main St. New York, NY"

Я бы хотел иметь возможность вызывать функцию, когда установлен атрибут address, который будет выполнять такие вещи, как переформатирование адреса или поиск, добавление в почтовый индекс и т. Д. Есть ли способ выполнить это в рамках определения объекта или мне просто нужно делать это каждый раз, когда я устанавливаю атрибут address?

Ответы [ 2 ]

7 голосов
/ 28 июля 2011

Что вам, вероятно, понадобится, так это свойство .

class C(object):
  def __init__(self, x):
    self._x = x

  def get_x(self):
    return self._x
  def set_x(self, x):
    self._x = x
  x = property(get_x, set_x)

obj = C(5)
obj.x = 6    # set
print obj.x  # get

См. Эту ссылку для более подробной информации: http://snippets.dzone.com/posts/show/954

3 голосов
/ 28 июля 2011

Вы ищете property().

def Student(object):
  def _get_address(self):
     ...

  def _set_address(self):
     ...

  address = property(_get_address, _set_address)
...