链接其他类实例中的类实例

时间:2019-07-15 07:05:57

标签: python

我正在尝试建立一个类,该类中的实例可能(或可能不)相关并且具有不同的“权重”。我能想到的唯一简单的例子是在很多游戏中都有宝石,您可以将较少的宝石合并为质量更高的宝石,但也可以在其中独立找到它们。

还请原谅我对Python的屠杀,我很新,我也不知道该如何处理。

class Gem:
    def __initi__(self, name, buyCost, sellCost, ingredients):
        self.name = name
        self.buyCost = buyCost
        self.sellCost = sellCost
        self.ingredients = ingredients

gems = [
    Gem("Chipped Topaz", 2, 1, null),
    Gem("Topaz", 20, 10, 3x[Chipped Topaz]),
    Gem("Greater Topaz", 200, 100, 5x[Topaz]),
    Gem("Prism", 5000, 500, 1x[Greater Topaz] and 1x[Greater Emerald] and 1x [Greater Amethyst])
]

因此,切碎的托帕石是一种“基础”宝石,没有任何东西可以组合成切碎的托帕石,就是这样。然后,您可以将3个切碎的托帕石合并成一个托帕石,将5个托帕石合并成一个更大的托帕石,最后您可以将3个不同的较大宝石合并成一个棱镜。

我想要实现的是Gem类的所有相关实例之间的关系,因此,例如,我可以轻松地沿线层叠​​并得出结论,对于更大的黄玉,我需要15个切碎的黄玉。但是,如果我仅将Gem的黄玉实例更改为需要4片黄玉,那同样的计算将表明我需要20颗黄玉。

总结:

  1. 我想在同一个类的实例中引用该类的其他实例
  2. 引用可以是无,一个或多个实例
  3. 对这些关系进行加权(并且权重可以更改)

我不知道我是否要正确解决问题。上面的代码肯定是错误的,任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

我看到两种方法


(1)使用变量并创建第一个gem

gem_chiped_tobaz = Gem("Chipped Topaz",...) 

现在您可以在下一个gem中使用变量gem_chiped_tobaz

gem_topaz = Gem("Topaz", ... [gem_chiped_tobaz])

直接访问第一个gem的第一个实例。

这样,您可以创建三个相同类的实例并使用它们

gem_1 = Gem("Chipped Topaz",...) 
gem_2 = Gem("Chipped Topaz",...) 
gem_2 = Gem("Chipped Topaz",...) 
gem_topaz = Gem("Topaz", ... [gem_1, gem_2, gem_3])

(2)保留在字典中,然后可以使用字符串

gems = {
   "Chipped Topaz": Gem("Chipped Topaz", 2, 1, None),
   "Topaz": Gem("Topaz", 20, 10, ["Chipped Topaz", "Chipped Topaz", "Chipped Topaz"]),
}

然后第二个gem(“ Topaz”)可以使用字符串"Chipped Topaz"来访问gem["Chipped Topaz"]

此方法似乎更有用,但我不知道它是否可以解决您的所有需求,因为它使用三个字符串"Chipped Topaz",可以访问同一实例,而不是三个不同实例。