为了学习Python中的OOP,我只想把一个简单的RPG示例放在一起。在
我创建了一个基类CharRace(object)。然后我创建了两个派生类,Elf(CharRace)和Dwarf(CharRace)。另外,我还有第二个基类CharClass(object),有两个派生类:Wizard(CharClass)和Warrior(CharClass)。在
我希望能够创建一个名为NewChar的新类,我可以传递一个名称、一个race和一个类,它将创建一个适当的对象,继承race和类的所有属性。在
例如,我想创建一个NewChar的类实例,如下所示: Player1=NewChar(“鲍勃”,精灵,巫师) Player2=NewChar(“菲尔”,侏儒,战士)
我确定有一个聪明的/正确的/可伸缩的方法来做到这一点,或者我的课程应该以不同的方式组织,但是我找不到它。任何帮助或建议都将不胜感激!在
class CharRace(object):
'race for all characters'
health = 0
mana = 0
race = ""
name = ""
def __init__(self, health, mana, race, name):
self.health = health
self.mana = mana
self.race = race
self.name = name
print ("self = ",self)
def decreaseHealth (self, amount):
self.health = self.health - amount
print ("Decreased health to: ", self.health)
if (self.health) <= 0:
print (self.name, "has died!!!")
def increaseHealth (self, amount):
self.health = self.health + amount
print ("Increased health to: ", self.health)
def printStats(self):
print()
print("Stats for",self.name)
print (" Race =",self.race)
print (" Health =",self.health)
print (" Mana =",self.mana)
CharClass.printStats(self)
def __str__(self):
return (self.name)
class CharClass(object):
'class for all characters'
weapon = ""
armor = 0
def __init__(self, weapon, armor, classname):
self.weapon = weapon
self.armor = armor
self.classname = classname
print ("self = ",self)
def printStats(self):
print (" Weapon =",self.weapon)
print (" Armor =",self.armor)
# Character Classes
class Warrior(CharClass):
'warrior class'
weapon = "Sword"
armor = 200
classname = "Warrior"
def __init__(self):
CharClass.__init__(self, self.weapon, self.armor, self.classname)
class Wizard(CharClass):
'wizard class'
weapon = "Wand"
armor = 100
classname = "Wizard"
def __init__(self):
CharClass.__init__(self, self.weapon, self.armor, self.classname)
# Character Races
class Elf(CharRace):
'Elf subclass'
health = 100
mana = 200
race = "Elf"
def __init__(self, name):
CharRace.__init__(self, self.health, self.mana, self.race, name)
class Dwarf(CharRace):
'Dwarf subclass'
health = 200
mana = 100
race = "Dwarf"
def __init__(self, name):
CharRace.__init__(self, self.health, self.mana, self.race, name)
# This is not an efficient or scalable way to do this....
class ElfWarrior(Elf,Warrior):
'New character creation'
def __init__(self, name):
Elf.__init__(self, name)
Warrior.__init__(self)
class ElfWizard(Elf,Wizard):
'New character creation'
def __init__(self, name):
Elf.__init__(self, name)
Wizard.__init__(self)
class DwarfWarrior(Dwarf,Warrior):
'New character creation'
def __init__(self, name):
Dwarf.__init__(self, name)
Warrior.__init__(self)
class DwarfWizard(Dwarf,Wizard):
'New character creation'
def __init__(self, name):
Dwarf.__init__(self, name)
Wizard.__init__(self)
如果您真的想使用这种方法,您可以尝试如下方法:
Here是关于类型函数和元类的一个很好的讨论,您可以使用它们来进一步微调。在
这不是最好的办法。喜欢组合而不是继承。如果你的角色换了职业,或者你想双重职业呢?在
你可以试试这样的方法:
^{pr2}$请参阅《设计模式:可重用面向对象软件的元素》一书或《Head-First Design Patterns了解更多信息。在
相关问题 更多 >
编程相关推荐