保存和加载 Class 个实例
Saving and Loading a Class Instance
我有一个 class 可以创建一个新的角色对象。
class Character():
def __init__(self):
self.name = None
self.hp = None
self.mp = None
class Race(Character):
def __init__(self):
super().__init__()
self.race = None
它位于名为 char 的模块中。所以我有了创建新游戏的代码。
elif command == "new game":
name_game = input('Name your game: ')
cur_save=open('saves/' + name_game + '.p', 'wb')
player = char.Character()
player_name = input('Name your character: ')
player.name = player_name
player_race = input('What is your race? ')
player.race = player_race
pickle.dump(player, cur_save, -1)
cur_save.close()
现在我想开始游戏并加载输入的玩家姓名和种族。但是以下只是将播放器设置为未定义。
cur_save=open('saves/' + name_game + '.p', 'rb')
player = pickle.load(cur_save)
我希望它将 player.name 设置为保存的值,与 player.race 相同。
还有什么我应该使用的东西,比如数据库之类的东西 (MySQL)
所以我快速测试了一下,没有问题:
import pickle
class Character():
def __init__(self):
self.name = None
self.hp = None
self.mp = None
class Race(Character):
def __init__(self):
super().__init__()
self.race = None
name_game = input('Name your game: ')
cur_save=open('saves/' + name_game + '.p', 'wb')
player = Character()
player_name = input('Name your character: ')
player.name = player_name
player_race = input('What is your race? ')
player.race = player_race
pickle.dump(player, cur_save, -1)
cur_save.close()
cur_save=open('saves/' + name_game + '.p', 'rb')
player = pickle.load(cur_save)
print(player.name)
我得到的是:
%run temp.py
Name your game: test
Name your character: Brian
What is your race? human
Brian
有时,如果您的 class 的定义已更改,或者即使您重新定义了 class(可能 运行ning 有点代码)。例如,假设我 运行 上面的代码的第一位,然后是 运行
class Character():
def __init__(self):
self.name = None
self.hp = None
self.mp = None
再次,本质上是重新定义角色。然后你会得到不直观的行为:
In [17]: player.__class__
Out[17]: __main__.Character
In [18]: player.__class__ == Character
Out[18]: False
In [20]: player2 = Character()
In [21]: player2.__class__
Out[21]: __main__.Character
In [22]: player2.__class__ == Character
Out[22]: True
所以你可能想确保没有发生类似的事情。通常这无关紧要,但如果变量名发生变化或其他原因,它可能会让你失望。
我有一个 class 可以创建一个新的角色对象。
class Character():
def __init__(self):
self.name = None
self.hp = None
self.mp = None
class Race(Character):
def __init__(self):
super().__init__()
self.race = None
它位于名为 char 的模块中。所以我有了创建新游戏的代码。
elif command == "new game":
name_game = input('Name your game: ')
cur_save=open('saves/' + name_game + '.p', 'wb')
player = char.Character()
player_name = input('Name your character: ')
player.name = player_name
player_race = input('What is your race? ')
player.race = player_race
pickle.dump(player, cur_save, -1)
cur_save.close()
现在我想开始游戏并加载输入的玩家姓名和种族。但是以下只是将播放器设置为未定义。
cur_save=open('saves/' + name_game + '.p', 'rb')
player = pickle.load(cur_save)
我希望它将 player.name 设置为保存的值,与 player.race 相同。 还有什么我应该使用的东西,比如数据库之类的东西 (MySQL)
所以我快速测试了一下,没有问题:
import pickle
class Character():
def __init__(self):
self.name = None
self.hp = None
self.mp = None
class Race(Character):
def __init__(self):
super().__init__()
self.race = None
name_game = input('Name your game: ')
cur_save=open('saves/' + name_game + '.p', 'wb')
player = Character()
player_name = input('Name your character: ')
player.name = player_name
player_race = input('What is your race? ')
player.race = player_race
pickle.dump(player, cur_save, -1)
cur_save.close()
cur_save=open('saves/' + name_game + '.p', 'rb')
player = pickle.load(cur_save)
print(player.name)
我得到的是:
%run temp.py
Name your game: test
Name your character: Brian
What is your race? human
Brian
有时,如果您的 class 的定义已更改,或者即使您重新定义了 class(可能 运行ning 有点代码)。例如,假设我 运行 上面的代码的第一位,然后是 运行
class Character():
def __init__(self):
self.name = None
self.hp = None
self.mp = None
再次,本质上是重新定义角色。然后你会得到不直观的行为:
In [17]: player.__class__
Out[17]: __main__.Character
In [18]: player.__class__ == Character
Out[18]: False
In [20]: player2 = Character()
In [21]: player2.__class__
Out[21]: __main__.Character
In [22]: player2.__class__ == Character
Out[22]: True
所以你可能想确保没有发生类似的事情。通常这无关紧要,但如果变量名发生变化或其他原因,它可能会让你失望。