看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发 别射了,没子弹了