python - OOB / Class

时间:2017-06-27 21:12:42

标签: python class

我最近了解了类和子类,我尝试了一些代码,但不断收到错误

  

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)

1 个答案:

答案 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