我如何使用类属性,参数和“自我”。在Python中有效吗?

时间:2017-04-06 18:56:11

标签: python class attributes

我正在创建一个基于文本的冒险游戏(如this帖子中所述),我仍然坚持如何使用类及其属性,与类相关的参数以及预定义的关键字{{ 1}}。我四处寻找如何使用它们,但无济于事。我将举一个例子,并附上一个问题:

self.

答案中有人建议将class Player: def __init__(self, name): self.name = name self.maxhealth = 100 self.health = self.maxhealth self.attack = 15 self.money = 0 def display(self, name): print("Name:",self.name,"\nHealth:",self.health,"/",self.maxhealth,"\nAttack Damage:",self.attack,"\nMoney:",self.money) 更改为self.name = name,但他们没有解释为什么或如何帮助。如果有人能告诉我如何以正确或最有效的方式定义self.name = None,请执行。我还想知道如何在以后的函数中调用它。

我对类属性如何工作(与上一个问题相关)以及如何知道它们是否已启用以及如何调用它们感到困惑。

我也不确定进入self.name的论据,以及如何使用它们。我不确定它是否有任何用途,但我看到有人class Player(#here):(object),我不知道他们添加了什么,如何调用它们等等。

(Edum #or something like that)

这些是我在游戏中想要的课程。我想知道我是否可以创建一个名为“敌人”的类,然后可以创建可以从该类调用的子集/类(再次,如何从类调用属性的任何帮助将非常感激),所以它使代码更清晰。

如果您不确定我刚才所说的话,或者您需要对问题进行更多说明,请发表评论。提前谢谢。

1 个答案:

答案 0 :(得分:1)

在Python类中快速上课。首先,让我们覆盖自己。 Self指的是您为该类创建的Object。所以我们说:

zombie1 = Zombie("bob")

此实例中的self指的是对象" zombie1"

现在,要使用方法的属性。将类视为封装一些通用数据的东西。它似乎已经有了那部分。现在属性是类包含的通用数据类型。例如,您的僵尸名称,攻击等。要访问它们,我们只需这样做:

zombie1.name
'bob'
zombie1.attack
5

等等。这将为您提供附加到这些属性的数据。

现在要制作子类,你可以做这样的事情。

class Enemies(object):

    def __init__(self):
        self.maxhealth = 100

class Zombies(Enemies):

    def __init__(self, name):
        super().__init__()
        self.name = name
        self.health = self.maxhealth
        self.attack = 5
        self.golddrop = random.randint(5, 10)

您可以像这样分配一个对象:

zombie2 = Zombie("Mike")

这样的输出将为您提供Zombie类和Enemies类的数据:

zombie2.maxhealth
100
zombie.name
'Mike'
zombie2.attack
5

等等。如果你仔细观察,你会看到zombie2具有属性maxhealth,即使它在Enemies下被初始化和定义。希望这有助于一些人!

对于你想要创建通用敌人数据以供个人怪物使用,我会把敌人类留给你。我只是想以maxhealth为例来说明它可以从子类中的父类拉出来。

对评论问题的回复:

要获得玩家名称,您可以采用以下两种方式之一,创建方法,或在编程时提出要求。我会告诉你两种方式。

class Player(object):

    def __init__(self):
        self.name = None
        self.gold = None

    def getName(self):
        self.name = input("Please enter your name: ")
        print(self.name)

player1 = Player()
player1.getName()

当你调用player1.getName()时,它会询问他们的名字并将其存储到name变量中。然后您可以通过以下方式拨打姓名:

player1.name
'Peter'

你也可以这样做:

class Player(object):

    def __init__(self, name):
        self.name = name
        self.gold = None

这样您就可以在创建对象时调用玩家名称,例如:

player1 = Player(input("Please enter your name here: "))

player1.name
'Peter'

这种方式允许您专门编写名称,或者向用户询问名称。

最后编辑黄金位:

class Player(object):

def __init__(self, name):
    self.name = name
    self.gold = None

def giveGold(self):
    print("Since you are new, 100 gold dubloons have been given to you!")
    self.gold = 100

因此,您可以根据自己的意愿调用Player()。您可以硬编码名称,或要求用户输入。然后在Player()对象上运行方法giveGold()以授予它们100个黄金Dubloons。

player1 = Player("Peter")
player1.giveGold()
Since you are new, 100 gold dubloons have been given to you!
player1.gold
100

希望这是有道理的。我想我帮助你开始做得很好。我将把剩下的游戏留给你:)