Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初学者';s关于OOP和持久性的概念问题_Oop_Persistence - Fatal编程技术网

初学者';s关于OOP和持久性的概念问题

初学者';s关于OOP和持久性的概念问题,oop,persistence,Oop,Persistence,这是关于OOP的一个非常基本的问题(我正在使用python,但实际上这是一个概念性的问题,所以不是特定于语言的)。我环顾四周,但没有任何教程或书籍涉及这个具体问题。如果我不清楚,我道歉,并将很高兴澄清我写的任何东西 假设我正在创建一个简单的地址簿,我想使用pickle将其写入磁盘。我有一个名为Contact的类,其中\uuuuu init\uuuuu接受一些参数(firstName和lastName),我有一个菜单,您可以在其中创建联系人、编辑联系人等。对于我所看到的所有OOP示例,它们都会执行

这是关于OOP的一个非常基本的问题(我正在使用python,但实际上这是一个概念性的问题,所以不是特定于语言的)。我环顾四周,但没有任何教程或书籍涉及这个具体问题。如果我不清楚,我道歉,并将很高兴澄清我写的任何东西

假设我正在创建一个简单的地址簿,我想使用pickle将其写入磁盘。我有一个名为
Contact
的类,其中
\uuuuu init\uuuuu
接受一些参数(firstName和lastName),我有一个菜单,您可以在其中创建联系人、编辑联系人等。对于我所看到的所有OOP示例,它们都会执行以下操作

bob = Contact('Bob', 'Smith') 
jane = Contact('Jane', 'Smith')
firstName, lastName = raw_input("Enter first name: "), raw_input("Enter last name: ")    
contact = Contact(firstName, lastName)
…以创建联系人的新实例。但这些都是在运行时之前定义的。当我希望通过用户输入动态创建所有这些实例时会发生什么?我是否为每个人创建新实例?如何从用户输入中执行此操作?然后将所有实例写入一个列表并对其进行pickle?或者你会做一些像

bob = Contact('Bob', 'Smith') 
jane = Contact('Jane', 'Smith')
firstName, lastName = raw_input("Enter first name: "), raw_input("Enter last name: ")    
contact = Contact(firstName, lastName)

…然后,每次我要添加用户时,只需将联系人附加到列表中并获取联系人实例的新值?这是一个我没有真正理解的关键概念(因为我在任何地方都没有看到对它的真正解释)。我所看到的所有示例都没有实现上述功能,而是为每个事物/人创建新实例,但它们都是预定义的,不是动态创建的。如果有人能向我解释这个概念,我将不胜感激。

你的例子就是它的工作原理

是的,通常就是这样做的——制作对象数组。或其他类型的集合,具体取决于您的语言和/或框架。创建新对象时,首先在临时变量中创建它,然后将其插入到集合中


有时,当您有很多对象时,您不会一次从持久化存储(如数据库或文件)加载所有对象。您只需加载需要处理的一个(或几个)。如果只加载一个,它可能会得到一个特殊变量。几个将再次获得一个集合。

是否仍有方法将输入的数据作为实例的名称?还是完全没有必要?甚至可能?我在想什么,比如说。。。firstName=raw_input(“你的名字是什么?”:”)lastName=raw_input(“你的姓是什么?”:”)eval(firstName)=Contact(firstName,lastName)@JHarris-这取决于语言。PHP和Javascript可以做到这一点。C++/C#不能。然而,我认为这不是正确的思考方式。如果您想按姓名查找联系人,请使用“字典”(在某些语言中为“地图”)类型的集合。像这样用每个联系人的变量污染名称空间将是浪费,甚至是完全危险的(如果有人创建了一个名为您的变量之类的联系人怎么办?)