Python 如何在另一个类中访问一个类的属性?

Python 如何在另一个类中访问一个类的属性?,python,attributes,Python,Attributes,那么我想做什么呢 我所做的是在你的角色和敌人之间建立一个战斗系统 那么哪里出了问题 嗯,有两类: class Ally 及 每个类都有自己独特的名称、生命值、攻击和防御属性 class Ally def __init__(self, name, health, attack, defense): self.name = 'goodguy' self.health = 100 self.attack = 50

那么我想做什么呢 我所做的是在你的角色和敌人之间建立一个战斗系统 那么哪里出了问题 嗯,有两类:

class Ally  

每个类都有自己独特的名称、生命值、攻击和防御属性

class Ally  
    def __init__(self, name, health, attack, defense):  
        self.name = 'goodguy'  
        self.health = 100  
        self.attack = 50  
        self.defense = 30  
class Enemy  
    def __init__(self, name, health, attack, defense):  
        self.name = 'badguy'  
        self.health = 120  
        self.attack = 40   
        self.defense = 20  
但阶级盟友和阶级敌人都需要对方的健康和防御属性才能造成伤害

class Ally(object):  
    def __init__(self, name, health, attack, defense):  
        self.name = goodguy  
        self.health = 100  
        self.attack = 50  
        self.defense = 30  
    def fight(self)  
        (damage moves)  
        Enemy health = Enemy.health - ((self.attack/Enemy.defense)+2)  
    def battle_script(self)   
        while self.health > 0 and Enemy.health > 0:  
            self.fight()  
            if Enemy.health <=0:  
                break  
            Enemy.fight()  
            if self.health <=0:  
                break  
        if Enemy.health() <= 0:  
            print ('The ' + Enemy.name + ' was defeated')  
        if self.health <= 0:  
            print ("You were defeated")  
class Enemy(object):   
    def __init__(self, name, health, attack, defense):  
        self.name = badguy  
        self.health = 120  
        self.attack = 40  
        self.defense = 20  
    def fight(self)  
        (random damage moves)  
        Enemy health = Ally.health - ((self.attack/Ally.defense)+2)  
Ally.battle_scrip()  

所以问题是,我不知道如何提取它们各自的属性,即在调用敌方.health的战斗脚本中,我可能会将它们全部提取到一个类中,但我宁愿在创建更多敌人时将它们分开。

首先创建类bob=Ally的实例;邪恶=敌人。。。除此之外,根据给出的代码,我不知道您希望在这里发生什么,但我猜您希望得到下面的结果

def fight(ally,enemy):
    while ally.is_alive() and enemy.is_alive():
        ally.hp -= enemy.dmg
        enemy.hp -= ally.dmg
    print "OK FIGHT OVER SOMEONE DIED..."

fight(bob,evil_frank)

那么你想让盟友和敌人建立一对多的关系?我要做的是创建一个敌方类对象列表,这些对象是你的盟友类的成员。你甚至可以将一个参数传递给你的盟友构造器来选择你想要的敌人数量

应该是这样的:

import itertools    

class Ally(object):  
    def __init__(self, enemies):  
        self.name = goodguy  
        self.health = 100  
        self.attack = 50  
        self.defense = 30
        self.enemies = []
        for _ in itertools.repeat(None, enemies):
            self.enemies.append(Enemy())
...
如果你想要一个多:多关系,我会创建另一个类,它可以成为战斗的对象。让我们称之为战斗类。然后,您可以使用相同的技巧,为您的盟友和敌人创建一个类对象列表,然后在战斗类中创建执行战斗的逻辑

class Battle(object):  
    def __init__(self, allies, enemies):  
        self.allies = []
        self.enemies = []
        for _ in itertools.repeat(None, allies):
            self.allies.append(Ally())
        for _ in itertools.repeat(None, enemies):
            self.enemies.append(Enemy())
...

我认为你需要从OOP的基础开始。你想用itertools实现什么。重复这里?我很确定这会给你一个错误。它会造成你想要的盟友和敌人的数量。。。拥有多个对象意味着每个对象都有自己的统计属性,不,它不应该给你一个ValueError——我不知道你怎么会这么想。self.allies=/=盟友。一个是类对象的属性,另一个是作用域为构造函数的属性。通常情况下,这个成语是指uu in,但我想重复也行。
class Battle(object):  
    def __init__(self, allies, enemies):  
        self.allies = []
        self.enemies = []
        for _ in itertools.repeat(None, allies):
            self.allies.append(Ally())
        for _ in itertools.repeat(None, enemies):
            self.enemies.append(Enemy())
...