“如何存储”;“用户自制”;python中的对象是否正确?

“如何存储”;“用户自制”;python中的对象是否正确?,python,object,input,persistence,shelve,Python,Object,Input,Persistence,Shelve,我有一个例子,程序接受用户的输入,然后创建一些基于输入的对象 class Dog(): 定义初始化(self,name): self.name=名称 def dogmaker(): 名称=输入() 狗=狗(名称) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 制狗者() 这将创建一个Dog()类的实例,其中包含一个Dog对象,其名称由用户选择 如何使用sheels/pickle将用户制作的对象存储在某个地方,并在下一次运行程序时使用它们 在pickle

我有一个例子,程序接受用户的输入,然后创建一些基于输入的对象

class Dog():
定义初始化(self,name):
self.name=名称
def dogmaker():
名称=输入()
狗=狗(名称)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
制狗者()
这将创建一个Dog()类的实例,其中包含一个Dog对象,其名称由用户选择

如何使用sheels/pickle将用户制作的对象存储在某个地方,并在下一次运行程序时使用它们


在pickle和shelfs之间使用哪一种更好?区别是什么?

您可以使用pickle将几乎任何python数据类型保存到磁盘:

import pickle
class Dog():
    def __init__(self, name):
        self.name = name

# save dogs to file
def save_dogs(dog_list):
    with open('myfile', 'wb') as f:
        pickle.dump(dog_list, f)

# load dogs from file
def load_dogs():
    with open('myfile', 'rb') as f:
        return pickle.load(f) 

dog1 = Dog('shewawa')
dog2 = Dog('Bulldog')

# make a list that holds your dogs
dogs = [dog1, dog2]

save_dogs(dogs) 
mydogs = load_dogs()

# you have a loaded list of dogs and can iterate over or say dog1 = dogs[0] and so on
for dog in mydogs:
    print(dog.name)
输出:

shewawa
Bulldog

你忘了
()
buster.bark()
你必须把
def bark(self)
放在
class
里面才能使用
buster.bark()
。和缩进很重要。如果下次运行时需要实例带有值,则必须将其保存在文件中。您可以创建自己的方法将数据保存在文本文件中,并创建第二个方法从文件中读取数据。您还可以使用诸如
pickle
之类的模块来保存/读取实例。在这两种情况下,你都必须在程序开始时阅读它,并在程序结束时保存它。是的,对不起,我在这里写了这个小代码只是为了举例。我知道里面有很多错误!对于完整的问题检查我的另一个问题,我在这里给出了一个长而详细的解释,我几乎做到了,我可以让它为一只狗工作。但是当我的类有多个实例时?如何在一次内全部加载?我成功地保存了它们,但我的负载不起作用!你可以创建一个列表,并将狗添加到此列表,然后pickle此列表,我将尝试编辑我的应答OK,但我看到你手动创建了两个狗实例。如果我希望用户输入一些内容,创建以输入命名的狗,保存它们,然后检索它们,过程是否相同?我将把我的另一个问题与您联系起来,其中包含关于我的问题的完整信息和代码。非常感谢,你帮了我很大的忙