我在给一个类添加参数时,遇到了继承自另一个类的类型错误
我有一段代码,里面没有错误:
class Weapon(object): #don't know if this has to inherit from (object)
def __init__(self,weaponName):
self.weaponName=weaponName
class Character(object):
def __init__(self,name,weaponName):
self.name=name
self.weapon=Weapon(weaponName)
class NPC(Character):
def __init__(self,name,weaponName):
super().__init__(name,weaponName)
class Friendly(NPC):
def __init__(self,name,weaponName):
super().__init__(name,weaponName)
sword=Weapon('sword')
guard=NPC('Bob','sword')
print(guard.weapon.weaponName)
print(guard.name)
但是当我试着给武器类添加一个伤害属性的时候:
class Weapon(object):
def __init__(self,weaponName,weaponDamage):
self.weaponName=weaponName
self.weaponDamage=weaponDamage
class Character(object):
def __init__(self,name,weaponName):
self.name=name
self.weapon=Weapon(weaponName)
class NPC(Character):
def __init__(self,name,weaponName):
super().__init__(name,weaponName)
class Friendly(NPC):
def __init__(self,name,weaponName):
super().__init__(name,weaponName)
sword=Weapon('sword',15)
guard=NPC('Bob','sword')
print(guard.weapon.weaponName)
print(guard.name)
我得到了:
Traceback (most recent call last):
File "D:\Python files\inheritance test.py", line 21, in <module>
guard=NPC('Bob','sword')
File "D:\Python files\inheritance test.py", line 13, in __init__
super().__init__(name,weaponName)
File "D:\Python files\inheritance test.py", line 9, in __init__
self.weapon=Weapon(weaponName)
TypeError: __init__() missing 1 required positional argument: 'weaponDamage'
这是为什么呢?我并不想在角色初始化的时候实际引用weaponDamage,我只是想在后面的函数,比如攻击函数中使用它。如果我有多个武器,我希望能够说‘这个友好的角色有x个武器’,然后它就能通过查看武器类的x实例来知道这个武器的伤害值。
4 个回答
0
你的代码把武器的名字和武器对象搞混了。如果你想把武器的实例传给角色,应该把你的代码改成:
class Character(object):
def __init__(self,name,weapon):
self.name=name
self.weapon=weapon
还有
sword = Weapon('sword',15)
guard = NPC('Bob',sword)
注意,剑的名字前面没有'符号。
0
你不能在
self.weapon=Weapon(weaponName)
的声明中初始化Character。你必须在初始化时提供weaponDamage这个变量,不然它就无法正常工作。
class Character(object):
def __init__(self,name,weaponName):
self.name=name
self.weapon=Weapon(weaponName)
应该变成
class Character(object):
def __init__(self,name,weaponName, weaponDamage):
self.name=name
self.weapon=Weapon(weaponName, weaponDamage) #This is where you should change it
而且
guard=NPC('Bob','sword')
应该变成
guard=NPC('Bob','sword',15)
这样应该就能正常工作了。否则,你需要在Character的初始化中添加一些“if”语句,以根据weaponName指示的武器类型来设置weaponDamage的值。
1
根据错误信息
File "D:\Python files\inheritance test.py", line 9, in __init__
self.weapon=Weapon(weaponName)
TypeError: __init__() missing 1 required positional argument: 'weaponDamage'
这意味着你需要在第9行
调用Weapon
的构造函数,像这样。
Weapon(arg1, arg2)
因为Weapon
的构造函数正好需要2个参数。
备注:只修改下面这一行可能会避免错误。
class Weapon(object):
def __init__(self,weaponName,weaponDamage):
self.weaponName=weaponName
self.weaponDamage=weaponDamage
class Character(object):
def __init__(self,name,weaponName):
self.name=name
self.weapon=Weapon(weaponName, 1)#<-------modify like this...
class NPC(Character):
def __init__(self,name,weaponName):
super().__init__(name,weaponName)
class Friendly(NPC):
def __init__(self,name,weaponName):
super().__init__(name,weaponName)
sword=Weapon('sword',15)
guard=NPC('Bob','sword')
print(guard.weapon.weaponName)
print(guard.name)
1
你问了:
这是为什么呢?
在 Weapon.__init__()
这个地方,你指定了需要一个叫 weaponDamage
的参数。如果你在任何地方创建一个 Weapon
的实例,就必须提供 weaponDamage
的值。
你可以通过在 Weapon.__init__()
中给 weaponDamage
设置一个默认值来解决这个错误。
class Weapon(object):
def __init__(self,weaponName,weaponDamage=0):
self.weaponName=weaponName
self.weaponDamage=weaponDamage