To understand i found some links to make it clear.

1. http://stackoverflow.com/questions/6618002/python-property-versus-getters-and-setters

2. http://stackoverflow.com/questions/6304040/real-world-example-about-how-to-use-property-feature-in-python

First and last answer here are important.

3. The article for this topic here.

http://eli.thegreenplace.net/2009/02/06/getters-and-setters-in-python/

4. difference in
 4.1 class class_name():
             pass
 4.2 class class_name(object):
             pass

Note: one important use of this : (Not changing variables).
One simple use case will be to set a read only instance attribute , as you know leading a variable name with one underscore _x in python usually mean it's private (internal use) but sometimes we want to be able to read the instance attribute and not to write it so we can use property for this:
>>> class C(object):

def __init__(self, x):
self
._x = x

@property
def x(self):
return self._x

>>> c = C(1)
>>> c.x
1
>>> c.x = 2
AttributeError Traceback (most recent call last)

AttributeError: can't set attribute
  Note:

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

@property
def x(self):
"""I'm the 'x' property."""
return self._x

@x.setter
def x(self, value):
self._x = value

@x.deleter
def x(self):
del self._x

Try the above code and feel the power of property.