我在运行程序时遇到错误
Enter the length of the rectangle: 4
Enter the width of the rectangle: 2
Traceback (most recent call last):
File "C:\Users\Shourav\Desktop\rectangle_startfile.py", line 50, in <module>
main()
File "C:\Users\Shourav\Desktop\rectangle_startfile.py", line 34, in main
my_rect = Rectangle()
TypeError: __init__() missing 2 required positional arguments: 'length' and 'width'
代码:
# class definition
class Rectangle:
def __init__(self, length, width):
self.__length = length
self.__width = width
self.__area = area
def set_length(self, length):
self.__length = length
def set_width(self, width):
self.__width = width
def get_length(self, length):
return self.__length
def get_width(self, width):
return self.__width
def get_area(self, length, width):
area = (length * width)
self.__area = area
return self.__area
# main function
def main():
length = int(input("Enter the length of the rectangle: "))
width = int(input("Enter the width of the rectangle: "))
my_rect = Rectangle()
my_rect.set_length(length)
my_rect.set_width(width)
print('The length is',my_rect.get_length())
print('The width is', my_rect.get_width())
print('The area is',my_rect.get_area())
print(my_rect)
input('press enter to continue')
# Call the main function
main()
答案 0 :(得分:3)
您定义了一个Rectangle
类,其初始化方法需要两个参数:
class Rectangle:
def __init__(self, length, width):
但是你尝试创建一个而不用传递这些参数:
my_rect = Rectangle()
传递长度和宽度:
my_rect = Rectangle(length, width)
您的下一个问题是area
未定义,您可能想要计算:
class Rectangle:
def __init__(self, length, width):
self.__length = length
self.__width = width
self.get_area(length, width)
在设计说明中:通常在Python中你不使用那样的'私有'变量;只需使用普通属性:
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
@property
def area(self):
return self.length * self.width
和直接根据需要在实例上获取或设置这些属性:
print('The length is', my_rect.length)
print('The width is', my_rect.width)
print('The area is', my_rect.area)
以双下划线(__name
)开头的属性旨在避免子类意外重新定义它们;目的是保护这些属性免受破坏,因为它们对当前班级的内部工作至关重要。事实上,他们的名字被破坏,因而不太容易接近,这并不能真正使他们成为私人,更难以达到。无论你做什么,都不要像在Java中那样将它们误认为私人名称。
答案 1 :(得分:0)
当您声明my_rect = Rectangle()
时,length
需要width
和Rectangle __init__
传递给{{1}}方法。
答案 2 :(得分:0)
Rectangle的构造函数需要两个你没有设置的参数。
请参阅:
class Rectangle:
def __init__(self, length, width):
和
my_rect = Rectangle()
你需要:
my_rect = Rectangle(length, width)
仅供参考:
构造函数中的self参数是一个隐式传递的参数,因此你不要传递它(至少不是通过在代码中实现它)。
答案 3 :(得分:0)
您在__init__
课程中定义Rectangle
的方式要求您调用它的长度和宽度:
def __init__(self, length, width):
更改
my_rect = Rectangle()
my_rect.set_length(length)
my_rect.set_width(width)
到
my_rect = Rectangle(length, width)