Attributes are the properties and methods defined for a class, object, or data type. In Python, everything is an object. That's why many inbuilt data types, such as list, tuple, int, float, etc., support methods and properties.
Different objects have different attribute values, for instance, the list support
append()
method, whereas the tuple does not. And if we try to call the
append()
method on a tuple object, we will receive the AttributeError with an error message that this tuple object does not have the following attribute.
This is not only with tuples and lists. For every object, whether it is an object of a user-defined class or an inbuilt data type, if we try to access an unsupported attribute(property or method) on that object, we will encounter the AttributeError.
In this Python tutorial, we will discuss what AttributeError is and why it occurs in a Python program.
What is Python AttributeError ?
AttributeError is one of Python's standard exceptions. And as a Python developer, you will encounter this error many times. But once you know why this error is raised in your program, you will be able to solve it in no time. Before we discuss the AttributeError, let's take a look at what an attribute is.
What are Attributes?
Attributes are the properties and methods that are defined for a class or object. When we create a class using the
class
keywords, all the properties and methods defined inside that class will be called the class attributes. And once we define an object for that class, we can access those attributes using that object only. Similarly, built-in objects like a list, tuple, dictionary, int, float, etc., come with built-in attributes. We can list out all the supported attributes of an object using the dir() function.
Example
# all inbuilt attributes of list objects
x = [1,3,5,7,9]
print("List attributes")
print(dir(x))
Output
List attributes
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__',
'__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__',
'__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__',
'__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop',
'remove', 'reverse', 'sort'
]
AttributeError
To access an attribute of an object, we use the object name followed by the dot operator and the attribute name. If the attribute is a method, we also put the parenthesis "
()
" after the attribute name. But if we try to access such an attribute that does not exist for that object, we will receive the attribute Error.
Example 1: AttributeError with built-in Objects
Let's say we have two containers
container1
is a list object and
container2
is a set object. We also have a string of which words we need to add to these two containers. As
container1
is a list it can contain duplicate words but the
container2
will only contain unique words.
string = "As the years pass by, we all know owners look more and more like their dogs"
#list container
container1 = list()
#set container
container2 = set()
for word in string.split():
container1.append(word) #add word to the list
container2.append(word) #add word to the set (error)
print("List container: ", container1)
print("Set container: ", container2)
Output
Traceback (most recent call last):
File "main.py", line 11, in
container2.append(word) #add word to the set (error)
AttributeError: 'set' object has no attribute 'append'
In this example, we are getting the attribute error
"AttributeError: 'set' object has no attribute 'append'"
.
This is because container2 is a
set
object, and it does not have any method
append()
. append() method is only supported by Python's list objects. To add a new element to the set object, we use the
add()
method.
Example 1 solution
string = "As the years pass by, we all know owners look more and more like their dogs"
#list container
container1 = list()
#set container
container2 = set()
for word in string.split():
container1.append(word) #add word to the list
container2.add(word) #add word to the set
print("List container: ", container1)
print("Set container: ", container2)
Output
List container: ['As', 'the', 'years', 'pass', 'by,', 'we', 'all', 'know', 'owners', 'look', 'more', 'and', 'more', 'like', 'their', 'dogs']
Set container: {'pass', 'like', 'the', 'we', 'know', 'years', 'and', 'by,', 'their', 'dogs', 'look', 'owners', 'As', 'all', 'more'}
Example 2: AttributeError class and objects
We also the attribute error when we try to access such property or method of a class that does not exist. This generally happens when we make some typos while calling a property or method.
class Order:
def __init__(self, product, name):
self.product = product
self.name = name
def price(self):
if self.product == "coffee":
return 200
if self.product == "tea":
return 100
order1 = Order("coffee", "Raj")
print("Bill: ", order1.bill())
Output
Traceback (most recent call last):
File "main.py", line 14, in
print("Bill: ", order1.bill())
AttributeError: 'Order' object has no attribute 'bill'
In the above example, we are getting this error because we are trying to access the
bill()
method that is not defined in the
Order
class. To solve this problem, we need to ensure that we are calling the correct method to access the price for our product. In our Order class, to get the total price, we have the
price()
method not
bill()
.
Example 2 solution
class Order:
def __init__(self, product, name):
self.product = product
self.name = name
def price(self):
if self.product == "coffee":
return 200
if self.product == "tea":
return 100
order1 = Order("coffee", "Raj")
print("Bill: ", order1.price())
Output
Bill: 200
Conclusion
Attribute Error is raised in a Python program when we try to access an unsupported attribute using an object. To solve the error, we need to ensure that the method or property we are trying to access through the object does support the object.
If you are getting this error with some built-in data type object and do not know all the attributes of the object. For that, you can use the Python dir() function, which will list all the attributes supported by that particular object.
People are also reading:
- Python IndentationError: expected an indented block Solution
- How to use Gmail API in python to send mail?
- Python TypeError: Method_Name() missing 1 required positional argument: ‘self’ Solution
- Install python package using jupyter notebook
- Python TypeError: ‘>’ not supported between instances of ‘str’ and ‘int’ Solution
- How to extract all stored chrome password with Python
- Python TypeError: can only join an iterable Solution
- How to automate login using selenium in Python
- Python TypeError: ‘float’ object is not callable Solution
- Your guide for starting python coding on a MacBook
Leave a Comment on this Post