Python setattr() Function Example
Python setattr() method sets the value of a given attribute of an object of a class. We all know that we can assign a value to a class variable through a constructor and object function. But apart from this we there is one alternate method that is setattr() method.
Python setattr()
Content Overview
Python setattr() can be used to assign None to any object attribute. Python setattr() can be used to initialize a new object attribute.
See the following syntax.
setattr(object, name, value)
The function uses the following three parameters.
object: Object is that whose attribute to be set or changed.
name: Name is a string that contains the name of the attribute to be set.
value: Value is a value which is to be set.
The function does not return anything. The return value is None.
Program to show how setattr() works
See the following code.
# app.py # Creating a class of name Student class Student: # Creating class attributes name = "Debasis" roll = 24 # creating class object std = Student() # Printing data before using setattr() print("Name is : ", std.name) print("Roll no is: ", std.roll) # Now we will modify student's roll no setattr(std, 'roll', 20) # Printing data after modification print("\nAfter modification: ") print("Name is : ", std.name) print("Roll no is: ", std.roll)
Output
➜ pyt python3 app.py Name is : Debasis Roll no is: 24 After modification: Name is : Debasis Roll no is: 20 ➜ pyt
In the above example, we can see that we have changed the value of roll number from 24 to 20 using the setattr() method, and after that, when we call it, we can see the changed value.
When name attribute is not found and setting attribute to None
See the following code.
# app.py # Creating a class of name Student class Student: # Creating class attributes name = "Debasis" roll = 24 # creating class object std = Student() # Printing data before using setattr() print("Name is : ", std.name) print("Roll no is: ", std.roll) # Here we will set name to None setattr(std, 'name', None) # Now we will set value to an attribute # Which is not present in class setattr(std, 'section', 'CSE171') # Printing data after modification print("\nAfter modification:") print("Name is : ", std.name) print("Roll no is: ", std.roll) print("Section is : ", std.section)
Output
➜ pyt python3 app.py Name is : Debasis Roll no is: 24 After modification: Name is : None Roll no is: 24 Section is : CSE171 ➜ pyt
In the above example, we have set the value of name attribute to None, so one thing we can learn that we can assign None value also.
On the other hand, as we can see, there is no section attribute in the Student class, but we have used it in setattr().
So what happened, in this case, is, setattr() itself creates a new attribute if that attribute is not present in the class, and then it assigns a given value to it.
Python setattr() example with user input
We use the Python input() function to get the input from the user. See the following code.
# app.py class Student: pass stud = Student() attr_name = input('Enter the attribute name:\n') attr_value = input('Enter the attribute value:\n') setattr(stud, attr_name, attr_value) print('Data attribute =', attr_name, 'and its value =', getattr(stud, attr_name))
Output
➜ pyt python3 app.py Enter the attribute name: character_name Enter the attribute value: Eleven Data attribute = character_name and its value = Eleven ➜ pyt
Python setattr() exception
We can create a read-only attribute in the object using property function or property decorator.
In that case, if we try to set the attribute value using setattr() function, we will get AttributeError: can’t set attribute exception.
See the following code.
# app.py class Student: def __init__(self): self._name = None def get_name(self): print('get_name called') return self._name # for read-only attribute name = property(get_name, None) stud = Student() setattr(stud, 'name', 'Krunal')
Output
➜ pyt python3 app.py Traceback (most recent call last): File "app.py", line 16, in <module> setattr(stud, 'name', 'Krunal') AttributeError: can't set attribute ➜ pyt
Finally, the setattr() function in Python example is over.