IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python--抽象类和抽象方法】--求三角形、矩形、圆的面积和周长的编程题 -> 正文阅读

[Python知识库]【Python--抽象类和抽象方法】--求三角形、矩形、圆的面积和周长的编程题

Python–抽象类和抽象方法

写一道题之前,要知道方法是什么:

抽象类与普通类的不同之处是:抽象类里面通常包含抽象方法(没有实现功能),并且该类不能被实例化,只能被继承,且派生类必须实现抽象类中的抽象方法

使用抽象基类需要导入abc模块

#定义抽象类 class Flockmaster(metaclass=abc.ABCMeta): 	#定义抽象类方法
    @abc.abstractmethod
    def tending(self):
    	pass
    #定义抽象类AA的派生类 class Lamb(Flockmaster):
    #实现抽象类的抽象方法tending().
    def tending(self):
    	print("小羊辛勤的放羊......") l1=Lamb() l1.tending()
#运行结果:小羊辛勤的放羊...... ```
本题还涉及到其他的一些知识点:
类的特殊方法

较常见的:构造方法**init()** 和析构方法 del()
下面用到了构造方法 init() :用来为类中的成员设置初始值或进行必要的初始化工作,在类实例化时被自动调用和执行。
(具体可以体会体会下面这道题,或者去百度、看书其他博客看看,了解了解)

编程实现如下功能:

(1)定义一个抽象类Shape,在抽象类 Shape中定义求面积 getArea()和周长 getPerimeter()的抽象方法。
(2)分别定义继承抽象类Shape的3个子类即Triangle(三角形)、Rectangle(矩形)、和Circle(圆),在这3个子类中重写 Shape中的方法getArea()和 getPerimeter( )。
(3)分别创建类Triangle的对象t1,创建类Rectangle的对象r1,创建类Circle的对象c1,并输入所需的边长和半径,分别调用对象t1、r1、c1的getArea方法和getPerimeter(),输出各个对象的面积和周长。(求圆的周长和面积时π值取3.14)

sys模块:提供对Python解释器的相关操作
import sys
sys.exit(0) #退出程序
math模块:Python中的数学模块

具体代码如下:

import abc
import math
import sys
#定义抽象类Shape
class Shape(metaclass=abc.ABCMeta):
	#定义求面积 getArea()和周长 getPerimeter()的抽象方法
    @abc.abstractmethod
    def getArea(self):
        pass 
    def getPerimeter(self):
        pass
#定义抽象类Shape的派生类
class Triangle(Shape):
	#实例成员一般在构造方法__init__()中创建,也可以在其他方法中创建
    def __init__(self,a1,a2,a3):
    	#判断是否能构成三角形,能就继续,不能输出并退出
        if a1+a2>a3 and a3+a2>a1 and a1+a3>a2:
            self.a1=a1
            self.a2=a2
            self.a3=a3
        else:
            print("输入的三边不能构成三角形")
            sys.exit(0)
    def getArea(self):
    	#求三角形面积
        return 1/4*math.sqrt((self.a1+self.a2+self.a3))*(self.a1+self.a2-self.a3)*(self.a1-self.a2+self.a3)*(self.a2+self.a3-self.a1)
    def getPerimeter(self):
        return self.a1+self.a2+self.a3
#下面的矩形、圆都类似三角形
class Rectangle(Shape):
    def __init__(self,b1,b2):
        self.b1=b1
        self.b2=b2
    def getArea(self):
        return self.b1*self.b2
    def getPerimeter(self):
        return (self.b1+self.b2)*2
class Circle(Shape):
    def __init__(self,r1):
        self.r1=r1
    def getArea(self):
        return self.r1*self.r1*3.14
    def getPerimeter(self):
        return 2*self.r1*3.14
#方法一:
if __name__=='__main__':
    a1=eval(input("请输入三角形的边长a1:"))
    a2 = eval(input("请输入三角形边长a2:"))
    a3 = eval(input("请输入三角形边长a3:"))
    t1=Triangle(a1,a2,a3)
    print(f"三角形面积={t1.getArea()}")
    print(f"三角形周长={t1.getPerimeter()}")
    b1 = eval(input("请输入矩形边长b1:"))
    b2 = eval(input("请输入矩形边长b2:"))
    r1 = Rectangle(b1, b2)
    print(f"矩形面积={r1.getArea()}")
    print(f"矩形周长={r1.getPerimeter()}")
    r1 = eval(input("请输入圆的半径r1:"))
    c1 = Circle(r1)
    print(f"圆面积={c1.getArea()}")
    print(f"圆周长={c1.getPerimeter()}")
最后创建对象调用上面方法的还可以这样写:
#方法二:
def main():
    a1=eval(input("请输入三角形的边长a1:"))
    a2 = eval(input("请输入三角形边长a2:"))
    a3 = eval(input("请输入三角形边长a3:"))
    t1=Triangle(a1,a2,a3)
    print(f"三角形面积={t1.getArea()}")
    print(f"三角形周长={t1.getPerimeter()}")
    b1 = eval(input("请输入矩形边长b1:"))
    b2 = eval(input("请输入矩形边长b2:"))
    r1 = Rectangle(b1, b2)
    print(f"矩形面积={r1.getArea()}")
    print(f"矩形周长={r1.getPerimeter()}")
    r1 = eval(input("请输入圆的半径r1:"))
    c1 = Circle(r1)
    print(f"圆面积={c1.getArea()}")
    print(f"圆周长={c1.getPerimeter()}")
main()

小羊放羊ing…(亲亲,一起努力呀!走,放羊去!)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:04:26  更:2021-11-25 08:04:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:23:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码