2014-09-29 66 views
0

作为一名Python初学者,我试图创建一个简单的基于文本的游戏。我想知道如何正确引用我的实例我的Monster类,从我在Character类中定义的scan方法内(这是甚至可能的吗?)。如何从另一个类的方法调用或引用实例属性

class Monster: 
    def __init__(self): 
     self.HP = 5 
     self.color = 'blue' 


class Character: 
    def scan(self): 
     print("{} is {} and has {} HP.".format(monster.__name__, 
               monster.color, 
               monster.HP)) 


class Game: 
    def __init__(self): 
     self.monster = Monster() 
     self.player = Character() 

     self.player.scan() 

Game() 

我看过周围很多,试图像getattr的东西,没有任何的运气。我知道我可以将我的scan方法直接放在Game中,并使用self.monster.HPself.monster.color,但我真的很想避免这种情况。

任何帮助或批评是值得欢迎的,在此先感谢:)

+1

作为一个便笺,你可能不需要'怪物.__名字___。大多数类型没有'__name__'属性 - 类可以,但类_instances_不会...除非添加一个。而且,即使你写了“Monster .__ name__”,这只会给你这个班的名字,所以你会说'怪物是蓝色的,有5个HP'。据推测,并非所有的怪物都被命名为“怪物”。甚至连乔治福尔曼都给他的一些孩子乔治娜命名,而不是乔治。所以,你可能想为'Monster'实例添加一个'self.name'属性。 – abarnert 2014-09-29 21:19:41

回答

1

你会明确地传递怪物扫描:

class Character: 
    def scan(self, monster): 
     print("{} is {} and has {} HP.".format(
      monster.__name__, monster.color, monster.HP)) 

和:

self.player.scan(self.monster) 

这样你代码也可以处理多个怪物。

+0

为什么我只有在遇到Martijn Pieters的答案时才用完投票?其他人赞成这个对我来说。 :) – abarnert 2014-09-29 21:17:27

+0

天才!我不敢相信我以前没有尝试过......我寻找更复杂的东西!非常感谢。 – 2014-09-29 21:19:57

相关问题