Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Object initialisation warning

Class Example:

class Rectangle:
    def __init__(self, c, l, w):
        # self.area = None
        self.color = c
        self.length = l
        self.width = w
    def area(self):
        self.area = self.length * self.width
        return self.area

myRect1 = Rectangle('red', 2, 1)
area = myRect1.area()
print(area)

PyCharm 2024.2.3 (Community Edition) gives me a warning:

"Instance attribute area defined outside __init__"

It suggests adding field ‘area’ to Class Rectangle.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

self.area = None

If I do that, then the program crashes with

"TypeError: 'NoneType' object is not callable"

So, with the suggested PyCharm correction of the warning the program crashes, with the waring the program works correctly.

>Solution :

The issue you’re encountering stems from the conflict between the attribute self.area and the method area(). In Python, when you define an attribute and a method with the same name, the attribute can overwrite the method, causing the error.

To resolve this:

Rename either the method area() or the attribute self.area to avoid name conflicts.

class Rectangle:
    def __init__(self, c, l, w):
        self.color = c
        self.length = l
        self.width = w
        self._area = None  # Initialize an internal attribute for area
    
    def area(self):
        self._area = self.length * self.width
        return self._area

myRect1 = Rectangle('red', 2, 1)
area = myRect1.area()
print(area)

This keeps area() as the method and _area as the internal attribute. By prefixing it with an underscore, it indicates that _area is for internal use. This should satisfy PyCharm’s suggestion and avoid the NoneType issue.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading