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

2024-06-16 12:19:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

class Ally  

以及

class Enemy

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

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,我可能会将它们全部提取到一个类中,但我宁愿将它们分开,因为当我创建更多敌人时


Tags: nameselfif属性initdefclasshealth
2条回答

首先创建类的实例bob = Ally();evil_frank = Enemy();。。。除此之外,我不知道你期望在这里发生什么基于你的代码,但我猜你想要什么样的东西如下

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)

所以你想要一个one:many relationship 对于Ally:Enemy classes? 我要做的是,创建一个敌人类对象的列表,这些对象是你盟友类的成员。你甚至可以把一个参数传递给你的盟友构造器来选择你想要的敌人的数量

应该是这样的:

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())
...

如果你想要一个Many:Many relationship 我将创建另一个类,它可以作为战斗的对象。让我们称之为“战斗”类。然后你可以做同样的把戏,为你的盟友和敌人列出一个类对象列表,然后在战斗类中拥有你指挥战斗的逻辑

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())
...

相关问题 更多 >