Actor
x = property(getx, setx, delx, "I'm the 'x' property.")
функция появилась вместе с новыми классами.
x = property(get, set, del, doc) по сути переопределяет методы __getattr__, __setattr__, __delattr__ но только для конкретно этого атрибута.
то есть при вызове:
c = C()
c.x = 1 #- здесь происходит неявный вызов setx вместо стандартного __setattr__
print c.x # - getx вместо __getattr__
del c.x # - delx вместо __delattr__
Но если использовать любой другой атрибут то будут использоваться стандартные методы.
class C(object):
def getx(self):
print 'getx works...'
return self.__x
def setx(self, value):
print 'setx works...'
self.__x = value
def delx(self):
print 'delx works...'
del self.__x
x = property(getx, setx, delx, "I'm the 'x' property.")
************************************************
>>> c = C()
>>> c.x = 1
setx works...
>>> c.x = 2
setx works...
>>> c.x
getx works...
2
>>> del(c.x)
delx works...
>>> c.y = 1
>>> c.y
1
>>>
вместо любого из аргументов можно передать None тогда данный метод нельзя будет применять.
например:
x = property(getx, setx, None, "I'm the 'x' property.")
...
>>>del(c.x)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
AttributeError: can't delete attribute
Вот неплохая статья:
http://adam.gomaa.us/blog/2008/aug/11/the-python-property-builtin/