类示例:
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 更正警告,程序崩溃,通过警告,程序可以正常工作。
您遇到的问题源于属性 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 问题。