wbzxz 发表于 2023-6-6 21:10:32

大家给看看代码的错误在哪里啊?

class Rectangle:
    length = 0
    width = 0
    def set_length(self):
      self.length = float(input('请输入矩形的长度: '))
    def set_width(self):
      self.width = float(input('请输入矩形的宽度: '))
    def get_perimeter(self):
      if self.length == 0:
            self.set_length()
      if self.width == 0:
            self.set_width()
      return 2 * (self.length + self.width)


    def get_area(self):
      if self.length == 0:
            self.set_length()
      if self.width == 0:
            self.set_width()
      return self.length * self.width

r1 = Rectangle
print(r1.width, r1.length)
print(r1.get_perimeter())

运行错误提示:
Traceback (most recent call last):
File "***", line 100, in <module>
    print(r1.get_perimeter())
TypeError: get_perimeter() missing 1 required positional argument: 'self'


请问上面代码出现了错误,不知道该如何解决呢?

liuzhengyuan 发表于 2023-6-6 21:17:21

Rectangle 要加括号

class Rectangle:
    length = 0
    width = 0
    def set_length(self):
      self.length = float(input('请输入矩形的长度: '))
    def set_width(self):
      self.width = float(input('请输入矩形的宽度: '))
    def get_perimeter(self):
      if self.length == 0:
            self.set_length()
      if self.width == 0:
            self.set_width()
      return 2 * (self.length + self.width)


    def get_area(self):
      if self.length == 0:
            self.set_length()
      if self.width == 0:
            self.set_width()
      return self.length * self.width

r1 = Rectangle() # 此处要加括号
print(r1.width, r1.length)
print(r1.get_perimeter())

sfqxx 发表于 2023-6-6 21:43:36

在创建 Rectangle 类的实例时,需要使用圆括号来调用类,并将其赋值给变量 r1。修改代码如下:

r1 = Rectangle()
print(r1.width, r1.length)
print(r1.get_perimeter())

这样就可以正确调用 Rectangle 类中定义的方法和属性了。

完整代码:
class Rectangle:
    length = 0
    width = 0
    def set_length(self):
      self.length = float(input('请输入矩形的长度: '))
    def set_width(self):
      self.width = float(input('请输入矩形的宽度: '))
    def get_perimeter(self):
      if self.length == 0:
            self.set_length()
      if self.width == 0:
            self.set_width()
      return 2 * (self.length + self.width)


    def get_area(self):
      if self.length == 0:
            self.set_length()
      if self.width == 0:
            self.set_width()
      return self.length * self.width

r1 = Rectangle()
print(r1.width, r1.length)
print(r1.get_perimeter())

求最佳答案{:10_254:}

isdkz 发表于 2023-6-6 21:44:55

你创建 Rectangle 类的实例时,遗漏了 () 。你只写了类的名字,但没有调用它的构造函数。所以你实际上并没有创建一个新的 Rectangle 对象。

你应该像这样创建一个对象:

r1 = Rectangle()


然后就可以使用这个对象了:

print(r1.width, r1.length)
print(r1.get_perimeter())
print(r1.get_area())


这是你修复后的完整代码:

class Rectangle:
    length = 0
    width = 0
    def set_length(self):
      self.length = float(input('请输入矩形的长度: '))
    def set_width(self):
      self.width = float(input('请输入矩形的宽度: '))
    def get_perimeter(self):
      if self.length == 0:
            self.set_length()
      if self.width == 0:
            self.set_width()
      return 2 * (self.length + self.width)

    def get_area(self):
      if self.length == 0:
            self.set_length()
      if self.width == 0:
            self.set_width()
      return self.length * self.width

r1 = Rectangle()
print(r1.width, r1.length)
print(r1.get_perimeter())
print(r1.get_area())


你可以看到,现在 r1 是一个实例化的 Rectangle 对象,你可以调用它的方法,比如 get_perimeter 和 get_area ,以及访问它的属性,比如 width 和 length 。

wbzxz 发表于 2023-6-6 22:59:31

liuzhengyuan 发表于 2023-6-6 21:17
Rectangle 要加括号

class Rectangle:


谢谢您的指点.

wbzxz 发表于 2023-6-6 23:00:02

isdkz 发表于 2023-6-6 21:44
你创建 Rectangle 类的实例时,遗漏了 () 。你只写了类的名字,但没有调用它的构造函数。所以你实际上并没 ...

非常感谢.
页: [1]
查看完整版本: 大家给看看代码的错误在哪里啊?