class Gun(object):
def init(self, name, num):
self.name = name
self.num = num
__snum = num
def __str__(self):
return "枪:%s" % self.name
def biubiu(self):
if self.num > 0: # 子弹足够
self.num -= 1 # 子弹发射
print("开火!biubiu~")
else:
print("咔咔,没子弹了")
class Fire_soldier(Gun):
def init(self, name):
self.name = name
def __str__(self):
return "特种兵:%s" % self.name
def fire(self):
print("%s按下扳机" % self.name)
super(Fire_soldier, self).biubiu()
def relod(self):
super().num += super().__snum
gun = Gun("沙漠之鹰", 7)
soldier = Fire_soldier("战狼")
soldier.fire()
def __init__(self, name, num):
self.name = name
self.num = num
__snum = num
def __str__(self):
return "枪:%s" % self.name
def biubiu(self):
if self.num > 0: # 子弹足够
self.num -= 1 # 子弹发射
print("开火!biubiu~")
else:
print("咔咔,没子弹了")
class Fire_soldier(Gun):
def init(self, name):
self.name = name
def __str__(self):
return "特种兵:%s" % self.name
def fire(self):
print("%s按下扳机" % self.name)
super(Fire_soldier, self).biubiu()
def relod(self):
super().num += super().__snum
gun = Gun("沙漠之鹰", 7)
soldier = Fire_soldier("战狼")
soldier.fire()
你需要在class Fire_soldier的 __init__(): 中用 super().__init__(name,num) 调用父类的构造函数
你题目的解答代码如下:
class Gun(object):
def __init__(self, name, num):
self.name = name
self.num = num
__snum = num
def __str__(self):
return "枪:%s" % self.name
def biubiu(self):
if self.num > 0: # 子弹足够
self.num -= 1 # 子弹发射
print("开火!biubiu~")
else:
print("咔咔,没子弹了")
class Fire_soldier(Gun):
def __init__(self, name,num):
super().__init__(name,num) #调用父类的构造函数
self.name = name
def __str__(self):
return "特种兵:%s" % self.name
def fire(self):
print("%s按下扳机" % self.name)
super(Fire_soldier, self).biubiu()
def relod(self):
super().num += super().__snum
gun = Gun("沙漠之鹰", 7)
soldier = Fire_soldier("战狼",7)
soldier.fire()
print(Fire_soldier.mro)
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
Fire_soldier的类中初始化函数没有调用父类Gun,所以没有属性num,至少应该像下面这样写:
class Fire_soldier(Gun):
def __init__(self, name, num):
super().__init__(name, num)
但是由于Fire_soldier没有其他的属性,所以__init__函数也可以省去不写,这样创建实例的时候,自动调用父类Gun的初始化函数。
此外,Fire_soldier继承Gun有点不合逻辑,感觉两者更应该是从属关系:Fire_soldier拥有Gun,而不是继承。所以也可以像下面这样写:
class Gun(object):
def __init__(self, name, num):
self.name = name
self.num = num
self.snum = num
def __str__(self):
return "枪:%s" % self.name
def biubiu(self):
if self.num > 0: # 子弹足够
self.num -= 1 # 子弹发射
print("开火!biubiu~")
else:
print("咔咔,没子弹了")
class Fire_soldier():
def __init__(self, name, gun):
self.name = name
self.gun = gun
def __str__(self):
return "特种兵:%s" % self.name
def fire(self):
print("%s按下扳机" % self.name)
self.gun.biubiu()
def relod(self):
self.gun.num += self.gun.snum
gun = Gun("沙漠之鹰", 7)
soldier = Fire_soldier("战狼", gun)
soldier.fire()