我最近了解了类和子类,我尝试了一些代码,但不断收到错误
AttributeError:type object' Assassin'没有属性'武器'
这里的代码: 我认为这可能是继承的问题。
class Character(object):
def __init__(self,name,**kwargs):
self.name=name
self.hp=500
self.speed=50
for key,value in kwargs.items():
setattr(self,key,value)
class Warrior(Character):
def __init__(self,**kwargs):
self.weapon="Sword"
self.armor="Giant Skin"
super().__init__(name,hp,**kwargs)
def hp(self,new_hp):
self.new_hp=hp+500
if hp > 900:
print("Youre very healty!")
class Spearman(Warrior,Character):
def __init__(self,**kwargs):
self.weapon="Spear"
self.armor="Heavy Armor"
super().__init__(name,hp,**kwargs)
def rage(self):
if weapon == "Spear":
print("YOU ARE IN RAGE!")
class Thief(Character):
def __init__(self,**kwargs):
self.weapon="Dagger"
self.armor="Clean Fit"
super().__init__(name,hp,**kwargs)
def Avoidance(self,speed):
if speed > 80:
print("Avoided from enemy!")
else:
print("not fast enough!")
class Assassin(Thief,Character):
def __init__(self,weapon,armor,**kwargs):
self.weapon="Slim Dag"
self.armor="Cloak of mystery"
super().__init__(name,hp,**kwargs)
dani=Assassin
omer=Spearman
print(dani.weapon)
print(dani.armor)
print(dani.hp)
print(dani.speed)
dani.Avoidance(100)
答案 0 :(得分:0)
<强> 1 即可。在python中,为了创建类的实例,语法如下:
dani = Assassin("mg7", "cloak")
(刺客类只定义了刺客的特征以及它能做什么。实际上在被叫实例化中创造了一个刺客)
<强> 2 即可。在Assassin的 init 方法中,您将self.weapon和self.armor设置为特定值。如果你不使用它们,为什么还需要获得武器和护甲值?
第3 即可。在 init 方法中,您使用名称和 hp 变量调用super,这些变量不存在。
<强> 4 即可。也许这是出于一个独特的目的,但至少我认为你没有理由继承Thief本身已经是角色的子类的 Thief AND Character (对于Spearman和Character来说同样如此) / p>
<强> 5 即可。根据python约定,方法名称应以小写字母开头(def避免而不是避免)。
<强> 6 即可。如果Thief.avoidance不使用 self 参数,则应将@staticmethod
改为其定义,将其更改为静态方法。 (并从方法参数中删除self。)
<强> 7 即可。在几种方法中,您可以在不使用&#34; self。&#34;的情况下访问实例变量,而这在Java和C#中工作,在java中您必须使用自己访问实例变量参数(指向实例的指针)。
点击此处了解更多信息: https://docs.python.org/2/tutorial/classes.html