用户创建的类

时间:2012-03-18 22:02:15

标签: python class

我正在学习Python,遵循一本书(绝对初学者的Python编程,第3版)。 这本书给出了一个基本模拟人生应用程序的例子,其中创建了有限数量的“生物”,用户必须提供和玩它们,增加他们的无聊和饥饿价值。 我正在练习使用课程,并试图制作自己的游戏。向用户呈现用户可以的菜单;购买/创建新的SIM卡,删除旧的SIM卡或与现有的SIM卡进行交互。 我遇到的问题是创建新类。用户最初会看到一个询问他们想要做什么的屏幕,如果他们按下X,他们将被带到createnewsim功能。然而问题是在制作新课时:

nameofsim = input("what would you like to call your new sim?")
newsim = sim(nameofsim)

如果用户要创建另一个,它将覆盖现有的,因为无法更改名称newsim,正如我在上一个问题中发现的那样,或多或少。

那么,我如何分配新的对象名称,或者防止旧的sims被覆盖,允许创建多个新的sim?

4 个答案:

答案 0 :(得分:2)

将sim类存储在列表或字典中; e.g。

class Sim(object):
    def __init__(self, name):
        self.name = name

names = ['tim','dave','jane']
sims = {}
for name in names:
    sims[name] = Sim(name)

答案 1 :(得分:0)

Jakob Bowyer已经回答了你的问题,但我想我会添加关于Python变量的说明。请考虑以下代码:

newSim = Sim('Bob')

oldSim = newSim

newSim = Sim('George')

在此示例中,最终结果为oldSim = BobnewSim = George。注意变量引用的对象如何不被变量赋值销毁或覆盖。唯一改变的是变量名称所指的内存中的位置。

答案 2 :(得分:0)

你可以制作像这样的短片词典

sim_dict = {}
while True:
    nameofsim = input("what would you like to call your new sim?")
    if nameofsim == "":
        break
    sim_dict[nameofsim] = Sim(nameofsim)

如果用户创建名为'dave'的SIM卡,您可以使用

访问它
sim_dict['dave']

但是当你编写程序时,你无法猜出用户将给sims命名的名称,所以你经常会在这样的循环中访问它们

for nameofsim, sim in sim_dict.items():
    if sim.birthday==today:
        sim.age+= 1

答案 3 :(得分:0)

您没有提供足够的代码来充分帮助您。因此,我们无法分辨是否可以保存模拟人的状态并继续新创建。还不清楚SIM卡是什么!它是整个游戏还是你所谓的“生物”?

但一般来说,你可以在字典中进行映射,如:

sims = {}
nameofsim = input("what would you like to call your new sim?")
if nameofsim in sims:
    newsim = sims[nameofsim]
else:
    newsim = sim(nameofsim)
    sims[nameofsim] = newsim

你似乎也没有掌握一些概念:

  1. 类通常与对象明显不同(在python类中是特殊类型的对象)。对象是类型关系中的类。由于面向对象范例中的继承和多态性,这种区别很重要!冠军和男孩都是狗,但冠军是拉布拉多犬,2岁,男孩是dobbermann,5岁。因此两者都属于 type 狗 - 这使得男孩和冠军成为了阶级狗的对象!
    如你所见,抽象类 dog 不是生活 - 它只是一个存在的抽象概念。但 对象 champ boy dog 类的活实例!

  2. 使用语句newsim = sim(nameofsim),您正在执行以下操作:

    1. 创建sim
    2. 类型的对象
    3. 使用nameofsim
    4. 提供的参数初始化它
    5. 将此对象指定为仲裁名称 - >变量newsim
  3. 但变量newsim NOT 对象!即使没有自己的变量名,对象也可能存在。使用变量只是为您提供了方便的对象访问。