夏瑾 发表于 2025-4-17 17:51:38

函数第六章运行出现异常

class Shape:
    def __init__(self,name):
      self.name=name
      def area(self):
            pass

class Circle(Shape):
    def __init__(self, radiuo):
      super().__init__("圆形")
      self.radiuo=radiuo
    def area(self):
      return 3.14*self.radiuo*self.radiuo

   
class Triangle(Shape):
    def __init__(self, base,height):
      super().__init__("三角形")
      self.bade=base
      self.height=height
    def area(self):
      return self.base*self.height/2

   
class Square(Shape):
    def __init__(self,length):
      super().__init__("正方形")
      self.length=length
    def area(self):
      return self.length*self.length


s=Square(5)
c=Circle(6)
t=Triangle(3,4)
s.name
'正方形'
s.length
5
s.area
<bound method Square.area of <__main__.Square object at 0x000002197E99EA50>>
   
s.length
5
s.area
<bound method Square.area of <__main__.Square object at 0x000002197E99EA50>>
c.area
<bound method Circle.area of <__main__.Circle object at 0x000002197E99EBA0>>
t.area
<bound method Triangle.area of <__main__.Triangle object at 0x000002197E99ECF0>>

FishC 发表于 2025-4-17 17:52:25

问题分析:

代码存在三个主要问题:

1. Circle类属性拼写错误:
构造方法参数是 radiuo(错误拼写),正确应为 radius

2. Triangle类属性拼写错误:
初始化时写成了 self.bade = base,正确应为 self.base = base

3. 方法调用缺少括号:
所有 area 方法调用时没有加 ()


修正后的代码:


class Shape:
    def __init__(self, name):
      self.name = name
      
    def area(self):# 修正缩进位置
      pass

class Circle(Shape):
    def __init__(self, radius):# 修正参数名
      super().__init__("圆形")
      self.radius = radius# 修正属性名
      
    def area(self):
      return 3.14 * self.radius * self.radius

class Triangle(Shape):
    def __init__(self, base, height):
      super().__init__("三角形")
      self.base = base# 修正属性名
      self.height = height
      
    def area(self):
      return self.base * self.height / 2

class Square(Shape):
    def __init__(self, length):
      super().__init__("正方形")
      self.length = length
      
    def area(self):
      return self.length * self.length

# 正确调用方式
s = Square(5)
c = Circle(6)
t = Triangle(3,4)

print(s.area())# 输出25
print(c.area())# 输出113.04
print(t.area())# 输出6.0


关键修改说明:

[*]Shape类的area方法缩进修正到类层级
[*]修正Circle类属性名拼写错误:radiuo → radius
[*]修正Triangle类属性名拼写错误:bade → base
[*]调用方法时添加 () 执行方法


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2025-4-17 18:08:34

本帖最后由 jackz007 于 2025-4-17 18:28 编辑

class Shape:
    def __init__(self,name):
      self.name=name
    def area(self):                           # 缩进错误
      pass

class Circle(Shape):
    def __init__(self, radius):
      super().__init__("圆形")
      self . radius = radius
    def area(self):
      return 3.14*self.radius*self.radius

   
class Triangle(Shape):
    def __init__(self, base,height):
      super().__init__("三角形")
      self.base=base                        # 属性 base 写错了
      self.height=height
    def area(self):
      return self.base*self.height/2

class Square(Shape):
    def __init__(self,length):
      super().__init__("正方形")
      self.length=length
    def area(self):
      return self.length*self.length

s=Square(5)
c=Circle(6)
t=Triangle(3,4)
print(s . name)
print(s . length)
print(s . area())                              # area 是方法,不是属性
print(c . name)
print(c . radius)
print(c . area())                              # area 是方法,不是属性
print(t . name)
print(t . base)
print(t . height)
print(t . area())                              # area 是方法,不是属性

      添加 __repr__() 方法可以直接打印对象获取信息
class Shape:
    def __init__(self,name):
      self.name=name
    def area(self):
      pass

class Circle(Shape):
    def __init__(self, radius):
      super().__init__("圆形")
      self . radius = radius
    def area(self):
      return 3.14*self.radius*self.radius
    def __repr__(self):
      return f'shape : {self . name} , radius : {self . radius} , area : {3.14 * self . radius * self . radius}'
   
class Triangle(Shape):
    def __init__(self, base,height):
      super().__init__("三角形")
      self.base=base
      self.height=height
    def area(self):
      return self.base*self.height/2
    def __repr__(self):
      return f'shape : {self . name} , base : {self . base} , height : {self . height} , area : {self . base * self . height / 2}'

class Square(Shape):
    def __init__(self,length):
      super().__init__("正方形")
      self.length=length
    def area(self):
      return self.length*self.length
    def __repr__(self):
      return f'shape : {self . name} , length : {self . length} , area : {self . length * self . length}'

s=Square(5)
c=Circle(6)
t=Triangle(3,4)
print(s)
print(c)
print(t)

      运行实况:
D:\\Python>python x.py
shape : 正方形 , length : 5 , area : 25
shape : 圆形 , radius : 6 , area : 113.03999999999999
shape : 三角形 , base : 3 , height : 4 , area : 6.0

D:\\Python>

player-none 发表于 2025-4-17 18:16:48


class Shape:
    def __init__(self,name):
      self.name=name
    def area(self): #缩进
      pass

class Circle(Shape):
    def __init__(self, radius):#不算'错误'的错误,半径单词为radius
      super().__init__("圆形")
      self.radius=radius
    def area(self):
      return 3.14*self.radius*self.radius

   
class Triangle(Shape):
    def __init__(self, base,height):
      super().__init__("三角形")
      self.base=base#bade->base
      self.height=height
    def area(self):
      return self.base*self.height/2

   
class Square(Shape):
    def __init__(self,length):
      super().__init__("正方形")
      self.length=length
    def area(self):
      return self.length*self.length

后面 area 应当加上 () 表示调用.

s.area()
页: [1]
查看完整版本: 函数第六章运行出现异常