Python - 面向对象编程 - 实战(4)

简介: Python - 面向对象编程 - 实战(4)

需求:士兵突进


  • 士兵许三多有一把 AK47
  • 士兵可以开火
  • 枪能够发射子弹
  • 枪装填子弹,可以增加子弹数量

 

需求分析


  • 很明显有两个类:士兵类,枪类
  • AK47 是枪名,是枪类的属性,每把枪都有子弹数,所以子弹数也是一个属性
  • 发生子弹是一个行为,所以是一个方法
  • 装填子弹也是一个行为,也是一个方法
  • 许三多是姓名,是士兵类的属性;士兵拥有,所以枪也是一个属性,对应的是枪类【一个对象的属性可以是另外一个类创建的对象】
  • 开火是士兵类的一个行为,所以是一个方法,开火会发射子弹,所以应该调用枪的发射方法

 

类图


image.png


本次实战采用封装思想,将所有属性私有化,并且每个属性都有 setter、getter 方法

 

代码实现


  • 面向对象编程的第一步:将属性和方法封装到一个抽象的类中
  • 外接使用类创建对象,然后让对象调用方法
  • 对象方法的细节都被封装在类的内部

 

先开发枪类还是士兵类?

枪类,因为士兵类依赖枪类,被依赖的类应该优先开发

 

枪类

假设每把枪一开始都没子弹,需要先手动装弹

class Gun:
    # 构造方法
    def __init__(self, name):
        # 封装 - 将实例属性私有化
        self.__name = name
        self.__bullet_count = 0
    # 自定义打印对象方法
    def __str__(self):
        return f"枪名:{self.__name} 子弹数:{self.__bullet_count}"
    # name - getter
    @property
    def name(self):
        return self.__name
    # name - setter
    @name.setter
    def name(self, name):
        self.__name = name
    # count - getter
    @property
    def bulletCount(self):
        return self.__bullet_count
    # count - setter 相当于装子弹
    @bulletCount.setter
    def bulletCount(self, count):
        self.__bullet_count += count
    # shot 发射
    def shoot(self):
        # 1、判断是否能发射
        if self.__bullet_count <= 0:
            print(f"{self.__name} 没有子弹了,请先装弹")
            return
        # 2、发射
        print(f"枪名:{self.__name} 发射")
        # 3、减少子弹
        self.__bullet_count -= 1


士兵类

假设每一个新兵一开始都没有枪

class Solider:
    # 构造方法
    def __init__(self, name):
        self.__name = name
        # 默认没有枪
        self.__gun = None
    # 自定义打印对象方法
    def __str__(self):
        return f"士兵名字:{self.__name} 拿着一把:{self.__gun.name}"
    # name - getter
    @property
    def name(self):
        return self.__name
    # name - setter
    @name.setter
    def name(self, name):
        self.__name = name
    # gun - getter
    @property
    def gun(self):
        return self.__gun
    @gun.setter
    def gun(self, gun):
        self.__gun = gun
    def fire(self):
        # 1、先判断是有枪
        if self.__gun is None:
            print(f"{self.__name} 士兵没有枪,不能发射!!请先装备枪!!")
            return
        # 2、有枪也要有子弹呀!上膛!
        self.__gun.bulletCount += 10
        # 3、拿枪射击!
        self.__gun.shoot()


拿枪射击,其实是

 

执行代码块

# 声明一个枪
ak47 = Gun("ak47")
print(ak47)
# 声明一个士兵
xusanduo = Solider("许三多")
# 给士兵带上 AK47!
xusanduo.gun = ak47
# 开火!
xusanduo.fire()
print(xusanduo)
# 输出结果
枪名:ak47 子弹数:0
枪名:ak47 发射
士兵名字:许三多 拿着一把:ak47
相关文章
|
30天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
121 6
|
30天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
48 10
|
2月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
204 45
|
1月前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
2月前
|
算法 Unix 数据库
Python编程入门:从基础到实战
本篇文章将带你进入Python编程的奇妙世界。我们将从最基础的概念开始,逐步深入,最后通过一个实际的项目案例,让你真正体验到Python编程的乐趣和实用性。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你提供有价值的信息和知识。让我们一起探索Python的世界吧!
|
2月前
|
并行计算 调度 开发者
探索Python中的异步编程:从基础到实战
在Python的世界里,异步编程是一种让程序运行更加高效、响应更快的技术。本文不仅会介绍异步编程的基本概念和原理,还将通过具体代码示例展示如何在Python中实现异步操作。无论你是初学者还是有经验的开发者,都能从中获益,了解如何运用这一技术优化你的项目。
|
2月前
|
数据处理 Python
探索Python中的异步编程:从基础到实战
在Python的世界中,“速度”不仅是赛车手的追求。本文将带你领略Python异步编程的魅力,从原理到实践,我们不单单是看代码,更通过实例感受它的威力。你将学会如何用更少的服务器资源做更多的事,就像是在厨房里同时烹饪多道菜而不让任何一道烧焦。准备好了吗?让我们开始这场技术烹饪之旅。
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
2月前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。