初识面向对象,产生了批量生成类的概念

看b站视频学python,sunck讲面向对象时,提出了一个作业“人开枪射击子弹”,以常规方式做完后突然想到是否有可以批量生成类的方法,于是便做了尝试,成功了 证实自己的想法后很开心。代码如下:

由于类的出现是为了程序的便捷,就突然想到写一个函数批量生成类,此代码用于批量生成“枪”类,可以用字典格式调用方法

 
class Person(object):
    def shoot(self,ziDan):
        self.ziDan = ziDan
        qiang = gan(self.ziDan)
        qiang.shoot1()
class gan(object):
    color = "blue"
    def shoot1(self):
        while self.ziDan != 0:
            self.ziDan -= 1
            if self.ziDan == 0:
                print("别射了,没子弹了")
            else:
                print("%s开枪射击,子弹还有%d发" % (self.name,self.ziDan))
    def __init__(self,ziDan,name):
         self.ziDan = ziDan
         self.name = name

# 创建了一个自动生成类的方法,以字典形式作为参数即可
def createGun(dict):
    for name1,ziDan in dict.items():
        # 因为后面创建类时,name1的值会变化,所以定义一个name2取此时name1的值
        name2 = name1
        class name1(gan):
            def __init__(self, ziDan, name):
                super(name1, self).__init__(ziDan, name)
        g = name1(ziDan, name2)
        g.shoot1()

# 创建了一个自动生成类的方法,调用时传递名称加子弹数量
# def createGun(name1, ziDan):
#     name2 =name1
#     class name1(gan):
#         def __init__(self,ziDan,name):
#             super(name1,self).__init__(ziDan,name)
#     g = name1(ziDan,name2)
#     g.shoot1()

dict = {'awm':10,'ak47':4,'m4a1':8}
createGun(dict)
执行结果:
awm开枪射击,子弹还有9发
awm开枪射击,子弹还有8发
awm开枪射击,子弹还有7发
awm开枪射击,子弹还有6发
awm开枪射击,子弹还有5发
awm开枪射击,子弹还有4发
awm开枪射击,子弹还有3发
awm开枪射击,子弹还有2发
awm开枪射击,子弹还有1发
别射了,没子弹了
ak47开枪射击,子弹还有4发
ak47开枪射击,子弹还有3发
ak47开枪射击,子弹还有2发
ak47开枪射击,子弹还有1发
别射了,没子弹了
m4a1开枪射击,子弹还有7发
m4a1开枪射击,子弹还有6发
m4a1开枪射击,子弹还有5发
m4a1开枪射击,子弹还有4发
m4a1开枪射击,子弹还有3发
m4a1开枪射击,子弹还有2发
m4a1开枪射击,子弹还有1发
别射了,没子弹了







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值