Python学习笔记之威虎山武器库


aihuafeng66t
克里斯蒂亚诺诺 2024-01-10 16:02:28 66408 赞同 0 反对 0
分类: 资源
Python学习笔记之威虎山武器库

一、系列缘由

  作为一名运维工程师,也一直有一个学习开发的想法,值此之际,不知道博客的下一期目标在哪里,在这思考和犹豫的间隙想着学习和充实一下自己,学习一下python语言,python随着大数据和人工智能的兴起而日益火爆。边学习边实践的原则学习python,希望自己更上一层楼。我的目标是创建一个自己的网站——太阳站点(sun-site.com),一个自娱自乐的自由空间。

二、学习笔记

1、面向对象编程重要概念

  Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。主要需要记住的概念如下:

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法:类中定义的函数。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 局部变量:定义在方法中的变量,只作用于当前实例的类。
  • 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
  • 实例化:创建一个类的实例,类的具体对象。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

2、类的定义和操作

  • 定义类语法格式如下:
class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

  • 类对象支持两种操作:属性引用和实例化。
  • 属性引用使用和 Python 中所有的属性引用一样的标准语法:obj.name。
  • 实例化,将类赋值给一个变量及实现了类的实例化。

#实例化类
x = MyClass()

3、类属性与方法

  • 类的私有属性
    __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
  • 类的方法
    在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。
    self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定使用 self。
  • 类的私有方法
    __private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。使用self.__private_methods方式在类的内部调用私有方法。

4、类的专有方法:

  • __init__ : 构造函数,在生成对象时调用
  • __del__ : 析构函数,释放对象时使用
  • __repr__ : 打印,转换
  • __setitem__ : 按照索引赋值
  • __getitem__: 按照索引获取值
  • __len__: 获得长度
  • __cmp__: 比较运算
  • __call__: 函数调用
  • __add__: 加运算
  • __sub__: 减运算
  • __mul__: 乘运算
  • __truediv__: 除运算
  • __mod__: 求余运算
  • __pow__: 乘方

5、构造方法

  构造方法是一个名为 init() 的特殊方法,该方法在类实例化时会自动调用。类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

三、实践练习

1、游戏代码

#!/root/anaconda3/bin/python
# This is a python program.
'''
这是一个python程序,主要用于展示威虎山上武器库,
武器库中主要有枪和炮两大类,详细武器品种继承父类。
有武器颜色、装弹量等属性。有开火、装弹等方法。
'''
class Gun:
        name = "枪"
        color = "black"
        bullets = 7
        def __init__(self,mycolor):
                self.color = mycolor
        def fire(self):
                if self.bullets>0:
                        self.bullets -= 1
                        print("=>",end=' ')
        def loading(self,zd):
                if (self.bullets+zd) > 7:
                        self.bullets = 7
                        print("子弹已装满!")
                else:
                        self.bullets = zd
                        print("装弹!",zd,"颗")

class HandGun(Gun):
        name = "手枪"

#继承父类Gun
class SubmachineGun(Gun):
        name = "冲锋枪"
        bullets = 30
        #定义类的私有属性,私有属性在外部无法调用
        __conbutton = 1
        #重新fire方法
        def fire(self,lj):
                __conbutton = lj
                if self.bullets>0 and __conbutton == 1 :
                        self.bullets -= 2
                        print("==>",end=' ')
                else:
                        self.bullets -= 1
                        print("=>",end=' ')

class SniperGun(Gun):
        name = "狙击枪"
        bullets = 10
        mirror = 1
        #定义子类私有方法
        def __take_aim(self,mirror):
                if mirror == 1 :
                        print("精准狙击视角!",end='')
                else:
                        print("盲狙视角!",end='')
        def fire(self,kj):
                if kj == 1 :
                        self.__take_aim(1)
                        self.bullets -= 1
                        print("=>",end=' ')
                else:
                        self.__take_aim(0)
                        self.bullets -= 1
                        print("=>",end=' ')

a = HandGun("白色")
b = SubmachineGun("黑色")
c = SniperGun("金色")
print("\na是一把",a.color,a.name,"子弹数量是",a.bullets)
while a.bullets > 0:
        a.fire()
dyl = int(input("请输入装弹数:"))
a.loading(dyl)
print("手枪还剩余子弹:",a.bullets)

print("\nb是一把",b.color,b.name,"子弹数量是",b.bullets)
lj = int(input("请选择连击或者单击,1表示连击,0表示单击:"))
while b.bullets > 10:
        b.fire(lj)
print("\n冲锋枪枪还剩余子弹:",b.bullets)

print("\nc是一把",c.color,c.name,"子弹数量是",c.bullets)
kj = int(input("请选择是否开镜,1表示开镜,0表示盲狙:"))
while c.bullets >5 :
            c.fire(kj)
print("\n狙击枪还剩余子弹:",c.bullets)

2、设计说明

  • 首先定义一个枪的父类,父类有名字、颜色、子弹数量等属性,有开火和装弹方法;
  • 定义一个手枪子类,手枪子类除了名字,其他均继承父类枪;
  • 定义一个冲锋枪子类,继承父类枪,自定义了私有属性连击开关,重新定义了开火方法,根据连击开关确定开火方式为连击或者单击;
  • 定义一个狙击枪子类,继承父类枪,自定义了私有方法开镜,重新定义了开火方法,根据是否开镜选择开火方式为精准狙击或者盲狙;
  • 实例化手枪、冲锋枪、狙击枪各一把
  • 根据提示输入参数,执行装弹、连击击发、开镜等操作。

3、测试实验

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
克里斯蒂亚诺诺L1
粉丝 0 资源 831 + 关注 私信
最近热门资源
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD  40
统信uos安装mysql的实例参考  31
分享解决宏碁电脑关机时自动重启的方法  30
在银河麒麟高级服务器操作系统V10SP3中,需要将默认shell类型修改为csh。  29
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作  28
统信uosboot区分未挂载导致更新备份失败  27
格之格打印机dp3300系列国产系统uos打印机驱动选择  25
以openkylin为例编译安装内核  23
最近下载排行榜
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD 0
统信uos安装mysql的实例参考 0
分享解决宏碁电脑关机时自动重启的方法 0
在银河麒麟高级服务器操作系统V10SP3中,需要将默认shell类型修改为csh。 0
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作 0
统信uosboot区分未挂载导致更新备份失败 0
格之格打印机dp3300系列国产系统uos打印机驱动选择 0
以openkylin为例编译安装内核 0
作者收入月榜
1

prtyaa 收益400.53元

2

zlj141319 收益237.46元

3

哆啦漫漫喵 收益231.42元

4

IT-feng 收益219.81元

5

1843880570 收益214.2元

6

风晓 收益208.24元

7

777 收益173.07元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!