在Python中运行时创建对象
在运行时创建对象时,我很难理解OOP的概念。我研究过的所有教育代码都定义了特定的变量,例如“Bob”,并将它们分配给一个新的对象实例。鲍勃=人() 我现在很难理解的是如何设计一个在运行时创建新对象的模型?我知道我的措辞可能是错误的,因为所有对象都是在运行时生成的,但我的意思是,如果我要在终端或UI中启动我的应用程序,我将如何创建新对象并管理它们。我不能即时定义新的变量名,对吗 我遇到这个设计问题的一个示例应用程序是存储人员的数据库。用户将获得一个终端菜单,该菜单允许他创建一个新用户并分配姓名、薪水和职位。如果您想管理该对象、调用函数等,您将如何实例化该对象并稍后调用它。?这里的设计模式是什么在Python中运行时创建对象,python,oop,concept,Python,Oop,Concept,在运行时创建对象时,我很难理解OOP的概念。我研究过的所有教育代码都定义了特定的变量,例如“Bob”,并将它们分配给一个新的对象实例。鲍勃=人() 我现在很难理解的是如何设计一个在运行时创建新对象的模型?我知道我的措辞可能是错误的,因为所有对象都是在运行时生成的,但我的意思是,如果我要在终端或UI中启动我的应用程序,我将如何创建新对象并管理它们。我不能即时定义新的变量名,对吗 我遇到这个设计问题的一个示例应用程序是存储人员的数据库。用户将获得一个终端菜单,该菜单允许他创建一个新用户并分配姓名、薪
请原谅我对OPP模型的理解不足。我目前正在阅读有关类和OOP的内容,但我觉得在继续之前,我需要了解我的错误。如果有什么需要澄清的,请告诉我。列表或字典之类的东西非常适合存储动态生成的值/对象集:
class Person(object):
def __init__(self, name):
self.name = name
def __repr__(self):
print "A person named %s" % self.name
people = {}
while True:
print "Enter a name:",
a_name = raw_input()
if a_name == 'done':
break
people[a_name] = Person(a_name)
print "I made a new Person object. The person's name is %s." % a_name
print repr(people)
对于您的示例,您希望使用模型抽象 如果
Person
是一个模型类,您可以简单地执行以下操作:
person = new Person()
person.name = "Bob"
person.email = "bob@aol.com"
person.save() # this line will write to the persistent datastore (database, flat files, etc)
然后在另一个会话中,您可以:
person = Person.get_by_email("bob@aol.com") # assuming you had a classmethod called 'get_by_email'
不使用变量名存储每个对象。变量名是为了方便程序员 如果你想要一个对象的集合,你只需要一个集合。使用包含对象实例的列表或字典,分别由索引或键引用
例如,如果每个员工都有一个员工编号,您可以将其保存在字典中,并将员工编号作为一个键。我将在这里尽力回答:
while True:
print "Enter name of employee, or "fin" to finish:"
emp_name = raw_input()
if emp_name == "fin":
break
# Like above, the "select_employee" would retreive someone from a database
cnn = db.connect()
person = select_employee(cnn, emp_name)
cnn.close()
# Person is now a variable, holding the person you specified:
print(person.name)
print(person.salary)
print(person.position)
# It's up to you from here what you want to do
这只是一个基本的、粗略的例子,但我想你明白我的意思了
另外,正如你所看到的,我在这里没有使用类。为类似的内容创建一个类通常是一个更好的主意,但这只是为了演示如何在运行时更改和使用变量。在实际程序中永远不会执行
Bob=Person()
。任何表明这一点的例子都可以说是一个坏例子;它本质上是硬编码。您将更经常(在真实代码中)使用从别处获得的数据(从文件读取、从用户交互接收等)来构造对象。更好的方法是类似于employee=Person(id,name)
为什么您希望自定义名称成为变量名?您实际上理解了创建对象。首先,你只需要学习更多关于容器的知识,比如列表、集合和字典。每当有人提到一个对象的“名称”,我都会强烈地想添加一个概念混乱的标签对象没有名称。有变量,它们引用对象。但这不是1:1的关系-许多变量可以引用一个对象,而对象不必由变量引用。它们是非常不同的东西。我已经预感到会是这样。谢谢你的解释,非常有用谢谢你的参考例子。我以为会是这样的
while True:
print "Enter name of employee, or "fin" to finish:"
emp_name = raw_input()
if emp_name == "fin":
break
# Like above, the "select_employee" would retreive someone from a database
cnn = db.connect()
person = select_employee(cnn, emp_name)
cnn.close()
# Person is now a variable, holding the person you specified:
print(person.name)
print(person.salary)
print(person.position)
# It's up to you from here what you want to do