Python:如果调用setter,调用函数?

时间:2011-07-28 08:38:17

标签: python object encapsulation setter

我有一个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 个答案:

答案 0 :(得分:7)

您可能需要的是属性概念。

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

答案 1 :(得分:3)

您正在寻找property()

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

  def _set_address(self):
     ...

  address = property(_get_address, _set_address)