🌴 2022.5.27 下午 实验
实验四 面向对象程序设计
前言
🎬本文章是 【Python语言基础】 专栏的文章,主要是上课的随堂笔记与练习
🔗Python专栏 传送门
📽实验源码已在Github整理
题目一
- 定义一个抽象类Shape,在抽象类Shape中定义求面积getArea()和周长getPerimeter()的抽象方法
- 分别定义继承抽象类Shape的3个子类即Triangle、Rectangle和Circle,在这3个子类中重写Shape中的方法getArea()和getPerimeter()
- 创建类Triangle、Rectangle、Circle的对象,对3个类中的方法进行调用测试
问题分析
利用abc库,设计抽象类Shape,在Shape中定义抽象方法getArea()
和周长getPerimeter()
,之后让Triangle、Rectangle、Circle分别继承Shape类并重写函数,其中Triangle类输入的三边需要额外判断是否满足两边之和永远大于第三边。设计好四个类之后,在主函数中新建对象并调用计算周长和面积
代码
"""
@Author:张时贰
@Date:2022年05月27日
@CSDN:张时贰
@Blog:zhangshier.vip
"""
import abc
import math
# 抽象类,用abc库,只需要声明函数,不需要写具体功能,不能够实例化.类似C+纯虚函数
class Shape ( metaclass=abc.ABCMeta ):
# 面积
@abc.abstractmethod
def getArea(self):
pass
# 周长
@abc.abstractmethod
def getPerimeter(self):
pass
# 三角形
class Triangle ( Shape ):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def getArea(self):
return 0.25*math.sqrt ( (self.a + self.b + self.c)*(self.a + self.b - self.c)*(self.b + self.c - self.a)*(
self.a + self.c - self.b) )
def getPerimeter(self):
return self.a + self.b + self.c
# 判断三边关系
def judgeInput(self):
a1 = self.a + self.b - self.c
a2 = (self.a - self.b) - self.c
b1 = self.b + self.c - self.a
b2 = (self.b - self.c) - self.a
c1 = self.a + self.c - self.b
c2 = (self.a - self.c) - self.b
if (a1 > 0 and a2 < 0) and (b1 > 0 and b2 < 0) and (c1 > 0 and c2 < 0):
return True
else:
return False
# 矩形
class Rectangle ( Shape ):
def __init__(self, a, b):
self.a = a
self.b = b
def getArea(self):
return self.a*self.b
def getPerimeter(self):
return (self.a + self.b)*2
# 圆
class Circle ( Shape ):
def __init__(self, r):
self.r = r
def getArea(self)