对象初始化警告

问题描述 投票:0回答:1

类示例:

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(社区版)给我一个警告:

"Instance attribute area defined outside __init__"

它建议将字段“区域”添加到类矩形中。

self.area = None

如果我这样做,程序就会崩溃

"TypeError: 'NoneType' object is not callable"

因此,通过建议的 PyCharm 更正警告,程序崩溃,通过警告,程序可以正常工作。

pycharm python-3.8
1个回答
0
投票

您遇到的问题源于属性 self.area 和方法 area() 之间的冲突。在Python中,当您定义同名的属性和方法时,属性可以覆盖方法,从而导致错误。

要解决此问题:

重命名方法 area() 或属性 self.area 以避免名称冲突。

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)

这将area()保留为方法,并将_area保留为内部属性。通过在其前面添加下划线,表明 _area 供内部使用。这应该满足 PyCharm 的建议并避免 NoneType 问题。

© www.soinside.com 2019 - 2024. All rights reserved.