如何具有相同对象的多个版本,每个版本具有不同的属性

时间:2019-05-26 16:51:58

标签: python python-2.7 class object properties

我正在制作基于文本的Skyrim,但无法找到一种使附魔/史密斯奖金生效的方法。我有一门武器课和一门盔甲课。我为游戏中包含的每种武器和一件装甲都有一个对象。我的武器属性是名称,基础伤害,铁匠,附魔和价值。对于装甲,属性是名称,插槽,基础防御,铁匠铺,结界和价值。

您可以在库存中拥有多个相同的商品,从而导致无法拥有同一商品的不同版本的问题。例如,假设您有2把铁剑,并且想附魔一把。如果使用ironsword.enchantment = [firedamage,20]进行此操作,则现在铁剑和以后发现的每把铁剑都有20点火焰伤害附魔。锻造也会发生同样的问题,如果您增强一把铁剑,所有铁剑都会得到增强。

有人知道解决方案吗?我能想到的是每个对象有1000个版本,并且每次获得一个新版本时,您都会得到下一个对象。例如:您得到的第一个铁剑将是对象ironsword1。下次您收到铁剑时,它将是ironsword2,这种情况将一直持续到您获得1000把铁剑为止。显然,这将非常耗时,而且我觉得肯定有更好的方法。

2 个答案:

答案 0 :(得分:1)

创建两个实例或一个对象时,它们不是同一件事。让我们坐下吧,我有一个通用类Triangle,其属性为a,b,c。我可以同时拥有两个不同边长的不同三角形。您一次只能修改1个护甲/武器实例的属性。您可以张贴一个示例类武器/对象实现的示例,以便我们可以更好地了解您要做什么吗?

编辑:

让我们尝试根据您的环境来解释类和子类。我们想要定义一个称为武器的通用对象,该对象具有一些伤害和射程属性。

class Weapon:
    def __init__(self, dmg):
        self.dmg = dmg
        self.range = 1
        self.ench = None
        self.upg = None
    def enchant(self, value):
        self.ench = value
    def upgrade(self, value):
        self.upg = value
    def __str__(self):
        return "Generic weapon, {} dmg and {} range".format(self.dmg, self.range)

现在,我们要创建一个名为Sword的子类,该子类继承通用类的所有内容,但可以实现更具体的属性和功能。

class Sword(Weapon):
    def __init__(self, dmg):
        Weapon(self, dmg)
        self.range = 5
    def __str__(self):
        "Sword, {} dmg, {} range, {} enchant, {} upgrade"
           .format(self.dmg, self.range, self.ench, self.upg)

您现在可以使用相同样式的两种类型的武器,对通用父类进行子类化。

a = Weapon(2)
b = Sword(5)
c = Sword(5)
c.enchant(2)
d = Sword(5)
d.upgrade(1)
print("{}\n{}\n{}\n{}".format(a,b,c,d))

=> Generic weapon, 2 dmg and 1 range
   Sword, 5 dmg, 5 range, None enchant, None upgrade
   Sword, 5 dmg, 5 range, 2 enchant, None upgrade
   Sword, 5 dmg, 5 range, None enchant, 1 upgrade

我希望您能从中获得一些概念,建议您从一些在线教程中进一步了解,您可以搜索OOP。

答案 1 :(得分:0)

我认为您可能误会了类的工作方式,或更具体地说,是类和实例之间的区别。

Weapon创建一个类是有意义的,但是您不希望IronSword成为该类的实例,而是希望它成为一个子类。然后,您的清单中将有两个IronSword类的实例,具有特定的结界。另外,您可能不为铁剑做一个明确的子类,而只是用参数将它们标识为铁剑实例化多个武器。但是无论哪种方式,一个object都应该对应一个对象,即每个库存选项都应该是一个单独的对象。

以下是一系列非常不错的YouTube视频,它们介绍了Python中的OOP: https://www.youtube.com/watch?v=ZDa-Z5JzLYM