data descriptors defined here__dict__ dictionary for instance variables (if defined__weakref__ list of weak references to the object (if definedsilly this is silly property once againeverything is working as we planned in practiceproperties are normally only defined with the first two parametersthe getter and setter functions if we want to supply docstring for propertywe can define it on the getter functionthe property proxy will copy it into its own docstring the deletion function is often left empty because object attributes are rarely deleted if coder does try to delete property that doesn' have deletion function specifiedit will raise an exception thereforeif there is legitimate reason to delete our propertywe should supply that function decorators another way to create properties if you've never used python decorators beforeyou might want to skip this section and come back to it after we've discussed the decorator pattern in python design patterns howeveryou don' need to understand what' going on to use the decorator syntax to make property methods more readable the property function can be used with the decorator syntax to turn get function into propertyclass foo@property def foo(self)return "barthis applies the property function as decoratorand is equivalent to the previous foo property(foosyntax the main differencefrom readability perspectiveis that we get to mark the foo function as property at the top of the methodinstead of after it is definedwhere it can be easily overlooked it also means we don' have to create private methods with underscore prefixes just to define property