【python向对象设计思刨析案例源码】

前言

面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
python作为一门简单强大的计算机编程语言,面向对象设计肯定少不了。


以下是本篇文章正文内容,下面案例可供参考

一、面向对象编程的优胜之处

1、开发周期短

2、它是一种全新的系统分析设计方法

3、开发工作的重用性、继承性高,使得重复的工作量减少

4、适用于各类信息系统的开发

5、减少后续软件开发量,实现了对客观世界描述到软件结构的直接转换

以下将通过案例逐一刨析面向对象编程的优点

二、上代码

1.引入库

代码如下(示例):

import os				
import time as t 
def cleanscreen():
    os.system("cls")
#调用os类库中的systeam("cls")函数美化输出

2.构建类

构建Master类(或者叫交互窗口类,因为我们是以一个master向其它对象发送信息并激活他们)
代码如下(示例):

class Master:
    def __init__(self):
        self.robot_list = []
        self.order = "NULL"
        self.Preselection = "NULL"  # 预选

    def first_elect(self):
        # 第一层交互
        cleanscreen()
        choose = input("""
                    1.选择机器人
                    2.创建机器人
                    3.删除机器人
                    """)
        if choose == "1":
            self.elect_robot()
        elif choose == "2":
            self.creat_robot()
        elif choose == "3":
            self.del_robot()
        else:
            cleanscreen()
            print("输入有误")
            t.sleep(1)
            self.first_elect()

    def elect_robot(self):
        # 选择机器人
        cleanscreen()
        for i in range(len(self.robot_list)):
            r = self.robot_list[i]
            print(i, "\t名字\t"+r.name+"\t类型\t"+r.type+"\t电量\t", r.battery)
        choose = input("\n请选择\n")
        choose = int(choose)
        self.Preselection = self.robot_list[choose]
        self.elect_order()

    def elect_order(self):
        # 选择命令
        robot = self.Preselection
        cleanscreen()
        if robot.type == "Fight":
            choose = input("""
                    1.出击
                    2.充电
                    3.输出基本信息
                    4或任意键.返回上一级\n
                    """)
            if choose == "1":
                robot.fight()
                self.elect_order()
            elif choose == "2":
                robot.charge()
                self.elect_order()
            elif choose == "3":
                robot.get_information()
            else:
                self.elect_robot()

        elif robot.type == "Clean":
            cleanscreen()
            choose = input("""
                    1.打扫
                    2.充电
                    3.输出基本信息
                    4或任意键.返回上一级\n
                    """)
            if choose == "1":
                robot.clean()
                self.elect_order()
            elif choose == "2":
                robot.charge()
                self.elect_order()
            elif choose == "3":
                robot.get_information()
            else:
                self.elect_robot()

    def creat_robot(self):
        name = input("""请输入名字\n""")
        type = input("""请选择类型
                      1.Fight
                      2.Clean""")
        if type == "1":
            type = "Fight"
            newrobot = Fightrobot(name, type)
            self.robot_list.append(newrobot)
            cleanscreen()
            print("创建成功")
            t.sleep(1)
            self.first_elect()
        elif type == "2":
            type = "Clean"
            newrobot = Cleanrobot(name, type)
            self.robot_list.append(newrobot)
            cleanscreen()
            print("创建成功")
            t.sleep(1)
            self.first_elect()
        else:
            cleanscreen()
            print("输入有误")
            t.sleep(1)
            self.creat_robot()

    def del_robot(self):
        # 删除机器人
        for i in range(len(self.robot_list)):
            r = self.robot_list[i]
            print(str(i)+"\t名字\t"+r.name+"\t类型\t" +
                  r.type+"\t电量\t"+str(r.battery))
        choose = input("\n请选择\n")
        choose = int(choose)
        del self.robot_list[choose]

首先捋一下 类 对象 属性 方法(函数) 消息 之间的关系
类是对象的模板
属性和方法是对象的要素
对象与对象之间的交互方式叫消息
类与对象系统分析设计方法所带来的好处和便利可以将复杂的问题变得清晰
这可以不是面向过程设计中定义一堆变量和函数可以相比的(这里旨在强调面向对象设计思想的优点而不是有意贬低面向过程)

这里的交互方式(对象间的消息)是调用激活
打个比方
如A吃饭的时候叫上B
B吃饭叫上C
C吃饭叫上D
那么对象A B C D就会同时产生行为(一般叫方法或函数)——干饭
同样的 在本案例中 当掉用Master中的elect_order()函数时也会调用robot类对象的相应的Fight()或Clean()函数

当然 也有另外一种调用方法就是事件调用法
就是说 当 “下课铃响起“ 这一事件触发时 时A B C D同时调用吃饭这个行为(方法)
“”"
当一个变量的值改变时,与之联系的对象也发生改变
说浪漫点
当春天来临 晨曦初露的时候
无论是山鸟 池鱼
一切都会重归于好

“”"

构建机器人基类

class Robot:
    def __init__(self, name, type):
        self.battery = 100  # 电量
        self.name = name
        self.type = type

    def get_information(self):
        cleanscreen()
        print("名字\t"+self.name)
        print("类型\t"+self.type)
        print("电量\t"+str(self.battery))

    def charge(self):
        self.battery = 100

构建战斗机器人Fightrobot和清洁机器人Cleanrobot 并继承机器人基类

class Fightrobot(Robot):

    def __init__(self, name, type):
        super().__init__(name, type)
        self.battery = 100
        self.tool=Tool("青龙偃月刀",99999)
    def fight(self):

        if self.battery >= 20:
            cleanscreen()
            print("Fighting!")
            t.sleep(1)
            self.battery -= 10
        else:
            cleanscreen()
            print("电量不足")


class Cleanrobot(Robot):

    def __init__(self, name, type):
        super().__init__(name, type)
        self.battery = 100
        self.tool=Tool("8848新概念吸尘器",10)

    def clean(self):
        if self.battery >= 20:
            cleanscreen()
            print("I am cleaning!")
            t.sleep(1)
            self.battery -= 5
        else:
            cleanscreen()
            print("电量不足")

这里又引出类的 继承 与 派生的概念
比如说案例代码中的机器人 有基础属性 名字 电量 等 都有共同的行为 充电
但是 机器人又可以分为战斗机器人 清洁机器人
战斗机器人与清洁的机器人都有共同之处
他们都属于机器人一类 有机器人这一共性
那么他们都可以由机器人这一基类派生出来
在后续增添新的需求时(比如这时我又想要一个运输机器人,建筑机器人)
又可以由机器人这一基类进行派生而无需从头到尾再写一个模板
大大提高代码复用性,减少后续软件开发量,提高效率

此时又要考虑一个问题
作为一个机器人 持有武器不过分吧!
但是这个武器又可以是一个对象 没错 ”万物皆为对象
我们可以把武器和机器组合起来
关二爷 + 青龙偃月刀 = 手持青龙偃月刀的关二爷
程序员 + cv键 = Bug制造机

当然 开个玩笑
话不多说
上bug 呸 上代码

class Tool:
    def __init__(self, name, combat):
        self.name = name
        self.combat = combat

    def upgrade(self):
        self.combat = self.combat+10

总结

以上就是今天要讲的内容
整个程序代码在此 欢迎使用(2022/5/21 未完善)

"""
@filename:  面向对象设计思刨析案例源码.py
@author:    Spanx   Soar_翱翔
@date:      2022/05/21
@note:      未完善
"""
import os
import time as t


def cleanscreen():
    os.system("cls")


class Master:
    def __init__(self):
        self.robot_list = []
        self.order = "NULL"
        self.Preselection = "NULL"  # 预选

    def first_elect(self):
        # 第一层交互
        cleanscreen()
        choose = input("""
                    1.选择机器人
                    2.创建机器人
                    3.删除机器人
                    """)
        if choose == "1":
            self.elect_robot()
        elif choose == "2":
            self.creat_robot()
        elif choose == "3":
            self.del_robot()
        else:
            cleanscreen()
            print("输入有误")
            t.sleep(1)
            self.first_elect()

    def elect_robot(self):
        # 选择机器人
        cleanscreen()
        for i in range(len(self.robot_list)):
            r = self.robot_list[i]
            print(i, "\t名字\t"+r.name+"\t类型\t"+r.type+"\t电量\t"+str(r.battery)+"\t工具\t"+r.tool.name)
        choose = input("\n请选择\n")
        choose = int(choose)
        self.Preselection = self.robot_list[choose]
        self.elect_order()

    def elect_order(self):
        # 选择命令
        robot = self.Preselection
        cleanscreen()
        if robot.type == "Fight":
            choose = input("""
                    1.出击
                    2.充电
                    3.输出基本信息
                    4或任意键.主页\n
                    """)
            if choose == "1":
                robot.fight()
                self.elect_order()
            elif choose == "2":
                robot.charge()
                self.elect_order()
            elif choose == "3":
                robot.get_information()
            else:
                self.first_elect()

        elif robot.type == "Clean":
            cleanscreen()
            choose = input("""
                    1.打扫
                    2.充电
                    3.输出基本信息
                    4或任意键.返回主页\n
                    """)
            if choose == "1":
                robot.clean()
                self.elect_order()
            elif choose == "2":
                robot.charge()
                self.elect_order()
            elif choose == "3":
                robot.get_information()
            else:
                self.first_elect()

    def creat_robot(self):
        name = input("""请输入名字\n""")
        type = input("""请选择类型
                      1.Fight
                      2.Clean""")
        if type == "1":
            type = "Fight"
            newrobot = Fightrobot(name, type)
            self.robot_list.append(newrobot)
            cleanscreen()
            print("创建成功")
            t.sleep(1)
            self.first_elect()
        elif type == "2":
            type = "Clean"
            newrobot = Cleanrobot(name, type)
            self.robot_list.append(newrobot)
            cleanscreen()
            print("创建成功")
            t.sleep(1)
            self.first_elect()
        else:
            cleanscreen()
            print("输入有误")
            t.sleep(1)
            self.creat_robot()

    def del_robot(self):
        # 删除机器人
        for i in range(len(self.robot_list)):
            cleanscreen()
            r = self.robot_list[i]
            print(str(i)+"\t名字\t"+r.name+"\t类型\t" +
                  r.type+"\t电量\t"+str(r.battery)+"\t工具\t"+r.tool.name)
        choose = input("\n请选择\n")
        choose = int(choose)
        del self.robot_list[choose]
        print("删除成功")
        t.sleep(1)
        self.first_elect()

master = Master()


class Robot:
    def __init__(self, name, type):
        self.battery = 100  # 电量
        self.name = name
        self.type = type

    def get_information(self):
        cleanscreen()
        print("名字\t"+self.name)
        print("类型\t"+self.type)
        print("电量\t"+str(self.battery))

    def charge(self):
        self.battery = 100


class Fightrobot(Robot):

    def __init__(self, name, type):
        super().__init__(name, type)
        self.battery = 100
        self.tool=Tool("青龙偃月刀",99999)
    def fight(self):

        if self.battery >= 20:
            cleanscreen()
            print("Fighting!")
            t.sleep(1)
            self.battery -= 10
        else:
            cleanscreen()
            print("电量不足")


class Cleanrobot(Robot):

    def __init__(self, name, type):
        super().__init__(name, type)
        self.battery = 100
        self.tool=Tool("8848新概念吸尘器",10)

    def clean(self):
        if self.battery >= 20:
            cleanscreen()
            print("I am cleaning!")
            t.sleep(1)
            self.battery -= 5
        else:
            cleanscreen()
            print("电量不足")


class Tool:
    def __init__(self, name, combat):
        self.name = name
        self.combat = combat

    def upgrade(self):
        self.combat = self.combat+10


if __name__ == '__main__':
    master.first_elect()

谢谢大家

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值