如何从两个不同的函数调用两个变量并添加它们?(Python3)

时间:2014-01-25 15:48:04

标签: function variables python-3.x

这是我正在研究的一些代码的一部分,我想两个人知道如何将两个变量添加到两个不同的函数中?

def Dwarf():
    Name = "Dwarf "
    Health = 150
    Mana = 10
    Stamina = 15
    Base_Attack = 20
    Melee_Attack = 0
    Elemental_Attack = 5
    print("You have choosen Dwarf! \n ")
return

def Mage():
    Name = "Mage "
    Health = 10
    Mana = 20
    Stamina = 5
    Base_Attack = 5
    Melee_Attack = 0
    Elemental_Attack = 20
    print("Your Class is Mage! \n ")
return

如何将名称加在一起以及健康/法术力量,以制作种族角色? 并且能够在我需要的时候打电话给它?

2 个答案:

答案 0 :(得分:1)

使用函数执行此操作似乎不合逻辑。您似乎需要使用。类可以具有类似(在您的情况下)的属性:

  • 名称
  • 健康
  • 魔法
  • 耐力
  • ...

和方法,例如:

  • 的getName()
  • 的setName()
  • setMana()
  • ...

班级Dwarf,如下所示:

class Dwarf(object):
    def __init__(self):
        self.name = "Dwarf"
        self.health = 150
        # more attributes

    def getName(self):
        return self.name

    # more methods

Mage类类似的东西。然后你可以得到name

dwarf1 =矮人() print dwarf1.getName()

当然,我建议您阅读Python中的

您还可以传递属性值作为参数,因此您可以在创建时设置它们:

班级Dwarf,如下所示:

class Dwarf(object):
    def __init__(self, name, health):
        self.name = name
        self.health = health
        # more attributes

    def getName(self):
        return self.name

    # more methods

并创建一个实例:

dwarf2 = Dwarf("strangeNameHere", 200)

注意:

我建议您关注Python naming conventions.

答案 1 :(得分:0)

要添加到Chistians good advice,在self.name之类的简单情况下使用getter和setter是不必要的。实际上,你只想阅读并分配它。创建实例后,您只需将内部数据成员作为普通变量进行访问即可。在定义中命名为self的是外部实例的名称。可以完全删除def getName():

dwarf1 = Dwarf('Bob', 200)
print(dwarf1.name,dwarf1.health)

# Changing the health.
dwarf1.health = 150
print(dwarf1.name,dwarf1.health)

只有当您需要执行的操作不仅仅是读取值或分配值(比如一些检查或只读变量)时,才应使用getter和setter。但在这种情况下,您应该使用Python属性或通过property()函数,或者@property装饰器可能更具可读性 - 请参阅http://docs.python.org/3.3/library/functions.html#property

实际上,您似乎想要为Dwarf和Mage共享同一组属性 - 只有值不同。您可以通过在创建对象时传递的类名来区分类:

class Being:

    def __init__(self, clsname, name):
        self.name = name
        self.clsname = clsname

        if self.clsname == 'dwarf':
            self.health = 150
            self.mana = 10
            self.stamina = 15
            self.base_attack = 20
            self.melee_attack = 0
            self.elemental_attack = 5

        elif self.clsname == 'mage':
            self.health = 10
            self.mana = 20
            self.stamina = 5
            self.base_attack = 5
            self.melee_attack = 0
            self.elemental_attack = 20

请注意,self.nameself.clsname不同。现在你可以创建像这样的矮人和法师:

dw1 = Being('dwarf', 'Bob')
dw2 = Being('dwarf', 'John')
mag1 = Being('mage', 'Merlin')
mag2 = Being('mage', 'Gandalf')

经过一些试验和失败后,您会发现定义基类Being以及派生类DwarfMage ...

真的更容易