(continued from previous page if __name__ ='__main__'main(below is the results for above codefrom pythonic import ring( radius radius radius radius radius radius "mehertraceback (most recent call last)typeerrorexpectedfloat or int below is the dictionary of the object 'rof code note thatthe 'radiusdoes not exist there anymorebut this will not break the codes of other usersdue to following reason note@property is used to convert the attribute access to method access in the other wordsthe radius will be removed from instance variable list after defining the 'propertyas in above code nowit can not be used anymore but@property decorator will convert the attribute access to method accessi the dot operator will check for methods with @property as well in this waythe code of other user will not break __dict__ {'date''''metal''copper''_radius' 'price' 'quantity' calling method as attribute if method is decorated with @property then it can be called as 'attributeusing operatorbut then it can not be called as attributeas shown in below exampleclass propertex(object)def mes_ (self)print("hello msg_ "@property def mes_ (self)can be called as attribute only print("hello msg_ " propertex( mes_ (hello msg_ mes_ hello msg_ mes_ (can not be called as method hello msg_ traceback (most recent call last)file ""line in typeerror'nonetypeobject is not callable @property