The syntax of property() is:
property(fget=None, fset=None, fdel=None, doc=None)
property() Parameters
The property() takes four optional parameters:
- fget (optional) - Function for getting the attribute value. Defaults to
None. - fset (optional) - Function for setting the attribute value. Defaults to
None. - fdel (optional) - Function for deleting the attribute value. Defaults to
None. - doc (optional) - A string that contains the documentation (docstring) for the attribute. Defaults to
None.
Return value from property()
property() returns the property attribute from the given getter, setter, and deleter.
- If no arguments are given,
property()returns a base property attribute that doesn't contain any getter, setter or deleter. - If doc isn't provided,
property()takes the docstring of the getter function.
Example 1: Create attribute with getter, setter, and deleter
class Person:
def __init__(self, name):
self._name = name
def get_name(self):
print('Getting name')
return self._name
def set_name(self, value):
print('Setting name to ' + value)
self._name = value
def del_name(self):
print('Deleting name')
del self._name
# Set property to use get_name, set_name
# and del_name methods
name = property(get_name, set_name, del_name, 'Name property')
p = Person('Adam')
print(p.name)
p.name = 'John'
del p.name
Output
Getting name The name is: Adam Setting name to John Deleting name
Here, _name is used as the private variable for storing the name of Person.
We also set:
- a getter method
get_name()to get the name of the person, - a setter method
set_name()to set the name of the person, - a deleter method
del_name()to delete the name of the person.
Now, we set a new property attribute name by calling the property() method.
As shown in the program, referencing p.name internally calls get_name() as getter, set_name() as setter and del_name() as deleter through the printed output present inside the methods.
Example 2: Using @property decorator
Instead of using property(), you can use the Python decorator @property to assign the getter, setter, and deleter.
class Person:
def __init__(self, name):
self._name = name
@property
def name(self):
print('Getting name')
return self._name
@name.setter
def name(self, value):
print('Setting name to ' + value)
self._name = value
@name.deleter
def name(self):
print('Deleting name')
del self._name
p = Person('Adam')
print('The name is:', p.name)
p.name = 'John'
del p.name
Output
Getting name The name is: Adam Setting name to John Deleting name
Here, instead of using property(), we've used the @property decorator.
First, we specify that name() method is also an attribute of Person. This is done by using @property before the getter method as shown in the program.
Next, we use the attribute name to specify the setter and the deleter.
This is done by using @name.setter for the setter method and @name.deleter for the deleter method.
Notice, we've used the same method name() with different definitions for defining the getter, setter, and deleter.
Now, whenever we use p.name, it internally calls the appropriate getter, setter, and deleter as shown by the printed output present inside the method.
To learn more about Python @property, visit Python @property: How to Use it and Why?