这是我正在研究的一些代码的一部分,我想两个人知道如何将两个变量添加到两个不同的函数中?
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
如何将名称加在一起以及健康/法术力量,以制作种族角色? 并且能够在我需要的时候打电话给它?
答案 0 :(得分:1)
使用函数执行此操作似乎不合逻辑。您似乎需要使用类。类可以具有类似(在您的情况下)的属性:
和方法,例如:
班级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)
注意:
答案 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.name
与self.clsname
不同。现在你可以创建像这样的矮人和法师:
dw1 = Being('dwarf', 'Bob')
dw2 = Being('dwarf', 'John')
mag1 = Being('mage', 'Merlin')
mag2 = Being('mage', 'Gandalf')
经过一些试验和失败后,您会发现定义基类Being
以及派生类Dwarf
和Mage
...