To understand i found some links to make it clear.



First and last answer here are important.

3. The article for this topic here.

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

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):
._x = x

def x(self):
return self._x

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

AttributeError: can't set attribute

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

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

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

def x(self):
del self._x

Try the above code and feel the power of property.