我正在学习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?
答案 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 = Bob
和newSim = 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
你似乎也没有掌握一些概念:
类通常与对象明显不同(在python类中是特殊类型的对象)。对象是类型关系中的类。由于面向对象范例中的继承和多态性,这种区别很重要!冠军和男孩都是狗,但冠军是拉布拉多犬,2岁,男孩是dobbermann,5岁。因此两者都属于 type 狗 - 这使得男孩和冠军成为了阶级狗的对象!
如你所见,抽象类 dog 不是生活 - 它只是一个存在的抽象概念。但
对象 champ 和 boy 是 dog 类的活实例!
使用语句newsim = sim(nameofsim)
,您正在执行以下操作:
sim
nameofsim
newsim
但变量newsim
是 NOT 对象!即使没有自己的变量名,对象也可能存在。使用变量只是为您提供了方便的对象访问。