首页 > 解决方案 > 如何使用另一个类引用一个类的属性

问题描述

这是我的代码

import random

class Player_Character:
    def __init__(self, hp, maxhp, ac, THAC0):
        self.hp = int(hp)
        self.maxhp = int(maxhp)
        self.ac = int(ac)
        self.THAC0 = int(THAC0)
    def attack(goblin):
        Player_Character_Damage = random.randint(1,10)
        goblin.hp -= Player_Character_Damage
        if (goblin.hp <= 0):
            print("congratulations you killed the goblin")
            del goblin

class goblin:
    def __init__(self, hp, maxhp, ac, THAC0):
        self.hp = int(hp)
        self.maxhp = int(maxhp)
        self.ac = int(ac)
        self.THAC0 = int(THAC0)
    def attack(Player_Character):
        goblin_damage = random.randint(1,4)
        Player_Character.hp -= goblin_damage
        if (Player_Character.hp <= 0):
            print("oh dear you have died")
            del Player_Character


Player_Character(10, 20, 10, 15)
goblin(5, 10, 8, 18)

Player_Character.attack(goblin)

我希望 Player_Character.attack(goblin) 对地精造成 1-10 伤害(可能会杀死它),但我得到一个错误:AttributeError: type object 'goblin' has no attribute 'hp'......显然我创建了一个带有“hp”属性的类,现在我很困惑。

标签: python-3.xclassinstantiation

解决方案


你必须实例化对象

正如@ShadowRanger 在评论中解释的那样,我应该提到我将 self 添加到函数中

import random

class Player_Character:
    def __init__(self, hp, maxhp, ac, THAC0):
        self.hp = int(hp)
        self.maxhp = int(maxhp)
        self.ac = int(ac)
        self.THAC0 = int(THAC0)
    def attack(self, goblin):
        Player_Character_Damage = random.randint(1,10)
        goblin.hp -= Player_Character_Damage
        if (goblin.hp <= 0):
            print("congratulations you killed the goblin")
            del goblin

class goblin:
    def __init__(self, hp, maxhp, ac, THAC0):
        self.hp = int(hp)
        self.maxhp = int(maxhp)
        self.ac = int(ac)
        self.THAC0 = int(THAC0)
    def attack(self, Player_Character):
        goblin_damage = random.randint(1,4)
        Player_Character.hp -= goblin_damage
        if (Player_Character.hp <= 0):
            print("oh dear you have died")
            del Player_Character


p = Player_Character(10, 20, 10, 15)
g = goblin(5, 10, 8, 18)


p.attack(g)

@ShadowRanger 还提到 del 不能按预期工作,您可以在外部使用它来删除实例。

p = Player_Character(10, 20, 10, 15)
g = goblin(5, 10, 8, 18)

p.attack(g)

if(g.hp <= 0):
    print("congratulations you killed the goblin")
    del g

推荐阅读