Python面向对象编程的思路记录

初学python,在编程中,应该如何一步一步着手,遵循一个合理的逻辑思维过程,培养良好的编程习惯,特此记录方便以后查阅。
小人开枪为例
1.定义主函数,控制整个程序流程:

def main()"""用于控制程序流程
    pass
    

if __name__ == '__main__':
    main()

2.搭建框架。在主函数中用中文注释每一个步骤

def main():

    # 1.创建一个小人对象

    # 2.创建一把枪对象

    # 3.创建一个弹夹对象
    
    # 4.创建子弹对象

    # 5.小人把子弹装入弹夹中

    # 6.小人把弹夹装入枪中

    # 7.创建一个敌人对象

    # 8. 小人拿起枪
    
    # 9.小人开枪射杀敌人

if __name__ == '__main__':
    main()

3.顺着搭建的框架,依次设计类、创建对象
在这里插入图片描述
4.每写一个类的方法,都要注释""“写出该方法的功能是干什么的”""(类似于大框架),以及用#写出怎么分步实现的,怎么实现的,再去写实现的过程。

"""实例"""
class A:
    def test(self):
        """进行测试"""
        #1. 取出数据
        XXXXXXXX
        #2. 带入公式
        XXXXXXXX

在这里插入图片描述
5.完成一个步骤之后,要习惯性的进行test

    # 测试弹夹的信息
    print(dan_jia)
    # 测试枪的信息
    print(ak47)
弹夹的子弹数量为:1/20
ak47枪装有弹夹
此人有ak47枪

完整代码

class Person():
    """人的类"""
    def __init__(self, name):
        self.name = name
        self.hp = 100  #100血

    def add_bullet(self,danjia_temp, bullet_temp):

        # 给弹夹添加子弹
        danjia_temp.tianjia_bullet(bullet_temp)

    def add_danjia(self,gun_temp, dan_jia_temp):
        # 给枪添加弹夹
        gun_temp.add_danjia(dan_jia_temp)

    def own_gun(self, gun_temp):
        """拿枪"""
        self.gun = gun_temp

    def __str__(self):
        return "此人有%s枪"%(self.gun.name)


    def shot(self, target):
         """击杀敌人"""
         self.gun.fire(target)

    def diaoxue(self,shanghai_temp):
        """被打中掉血了"""
        self.hp-=shanghai_temp
        print("打中敌人了,敌人的血还剩下:  %d"%self.hp)

class Gun():

    """枪的类"""
    def __init__(self, name):
        self.name  = name
        self.danjia = None
    def add_danjia(self,dan_jia_temp):
        #枪装入弹夹
        self.danjia = dan_jia_temp
    def __str__(self):
        if self.danjia == None:
            return "%s枪没有弹夹"%(self.name)
        else:
            return "%s枪装有弹夹"%(self.name)

    def fire(self, target):
        """从弹夹中取出子弹,然后让该子弹打中敌人"""
        #弹夹取出子弹
        zidan_temp = self.danjia.tanchu_bullet()
        #用子弹去打敌人
        if zidan_temp:
            zidan_temp.hurt(target)


class DanJia():
    """弹夹的类"""
    def __init__(self, max_number):
        self.max_number = max_number  #弹夹的容量
        self.bullet_list = []  #弹夹当前的子弹数量
    def tianjia_bullet(self,bullet_temp):
        "弹夹添加子弹"
        self.bullet_list.append(bullet_temp)
    def __str__(self):
       return "弹夹的子弹数量为:%d/%d"%(len(self.bullet_list), self.max_number)
    def tanchu_bullet(self):
        #弹夹.弹出子弹
        if self.bullet_list:
            return self.bullet_list.pop()
        else:
            print("很遗憾,没有子弹...")
            return None
class Bullet():

    def __init__(self):
        self.shanghai = 10

    def hurt(self, target):
        target.diaoxue(self.shanghai)
def main():

    # 1.创建一个小人对象
    xiaoren = Person("xiaoren")

    # 2.创建一把枪对象
    ak47 =Gun("ak47")

    # 3.创建一个弹夹对象
    dan_jia  = DanJia(20)  #属性:弹夹能装20颗子弹

    # 4.创建子弹对象
    bullet = Bullet()

    # 5.小人人把子弹装入弹夹中
    xiaoren.add_bullet(dan_jia, bullet)
    # 6.小人把弹夹装入枪中
    xiaoren.add_danjia(ak47, dan_jia)
    # 7.创建一个敌人对象
    enermy = Person("enermy")

    # 测试弹夹的信息
    # print(dan_jia)
    # 测试枪的信息
    # print(ak47)

    # 8. 小人拿起枪
    xiaoren.own_gun(ak47)

    #测试人
    # print(xiaoren)

    # 9.小人开枪射杀敌人
    xiaoren.shot(enermy)



if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值