在Python 2.7中使用变量引用类属性

在Python 2.7中使用变量引用类属性,python,class,variables,Python,Class,Variables,我正在开发一个基于文本的游戏,但我还没有找到一个非常有效的解决方案来解决我的战斗系统。我目前的声明设置如下: class Weapon1: damage = 4 price = 5 class Weapon2: damage = 4 price = 5 class Enemy1: damage = 2 health = 5 class enemy2: damage = 3 health = 6 def fight():

我正在开发一个基于文本的游戏,但我还没有找到一个非常有效的解决方案来解决我的战斗系统。我目前的声明设置如下:

class Weapon1:
    damage = 4
    price = 5

class Weapon2:
    damage = 4
    price = 5

class Enemy1:
    damage = 2
    health = 5

class enemy2:
    damage = 3
    health = 6

def fight():
    Weapon = raw_input("What weapon would you like to use?")
    if Weapon == "Weapon 1":
        if enemy = "Enemy1":
            Enemy1.health -= Weapon1.damage
        else:
            Enemy2.health -= Weapon1.damage
    else:
        if enemy = "Enemy1":
            pass
        else:
            pass
class pistol:
    damage = 4
    price = 5

class cannon:
    damage = 4
    price = 5

class Enemy1:
    damage = 2
    health = 5

class enemy2:
    damage = 3
    health = 6

def fight():
    Weapon = raw_input("What weapon would you like to use?")
    enemy.health -= weapon.damage
我有更多的敌人和类,所以我希望有一个语句可以使用变量引用类的属性。我决定不上传实际的功能,因为它超过100行长。 我所追求的伪代码如下所示:

class Weapon1:
    damage = 4
    price = 5

class Weapon2:
    damage = 4
    price = 5

class Enemy1:
    damage = 2
    health = 5

class enemy2:
    damage = 3
    health = 6

def fight():
    Weapon = raw_input("What weapon would you like to use?")
    if Weapon == "Weapon 1":
        if enemy = "Enemy1":
            Enemy1.health -= Weapon1.damage
        else:
            Enemy2.health -= Weapon1.damage
    else:
        if enemy = "Enemy1":
            pass
        else:
            pass
class pistol:
    damage = 4
    price = 5

class cannon:
    damage = 4
    price = 5

class Enemy1:
    damage = 2
    health = 5

class enemy2:
    damage = 3
    health = 6

def fight():
    Weapon = raw_input("What weapon would you like to use?")
    enemy.health -= weapon.damage

您可以使用一个简单的
dict
,在这里使用
namedtuple
,使代码更易于阅读:

from collections import namedtuple

Weapon = namedtuple('Weapon', ['damage', 'price'])

weapons = {
    'pistol': Weapon(4, 5),
    'cannon': Weapon(4, 5),
    # ...
}

def fight():
    weapon_name = raw_input("What weapon would you like to use?")
    enemy.health -= weapons[weapon_name].damage

在战斗前制造武器、敌人职业和初始技能()


这不是你使用类的方式。所以如果用户输入“cannon”,这会对碰巧是敌人的人造成4点伤害?此外,这可以用于布尔值吗?我有一个owned属性。另外,namedtuple做什么?