python - 动态创建类python的实例

标签 python class oop

我是 python 的新手,我正在尝试在类中动态创建新实例。那么让我举个例子,如果我有这样一个类:

class Person(object):
    def __init__(self, name, age, job):
        self.name = name
        self.age = age
        self.job = job

据我所知,对于我必须插入的每个新实例,我都必须声明一个变量并将其附加到 person 对象,如下所示:

variable = Person(name, age, job)

有没有一种方法可以让我动态地做到这一点?让我们假设我有一个这样的字典:

persons_database = {
'id' : ['name', age, 'job'], .....
}

我能否创建一段代码来迭代此数据库并自动在 Person 类中创建新实例?

最佳答案

只需使用 for 循环遍历字典即可。

people = []
for id in persons_database:
    info = persons_database[id]
    people.append(Person(info[0], info[1], info[2]))

然后列表 people 将包含 Person 对象,其中包含来自 persons_database 字典的数据

如果需要从原始id中获取Person对象,可以使用字典来存储Person对象,可以快速找到正确的Person。

people = {}
for id, data in persons_database.items():
    people[id] = Person(data[0], data[1], data[2])

然后你可以通过 people[id] 从他/她的 id 中得到你想要的人。因此,要增加 id = 1 的人的年龄,您可以执行 people[1].increment_age()

-------- 下面稍微高级一点的 Material ----------------

有些人提到使用列表/字典理解来实现你想要的。理解会稍微更有效率和更 pythonic,但如果你是编程/python 的新手,理解起来会有点困难

作为字典理解,第二段代码是people = {id: Person(*data) for id, data in persons_database.items()}

所以这里没有什么是无法解释的...... python 中的列表之前的 * 将列表按照列表的顺序将列表解包为单独的项目,因此对于列表 l 的长度为 n,*l 将计算为 l[0],l[1],...,l[n-2],l[n-1]

关于python - 动态创建类python的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31846508/

相关文章:

c++ - 将类对象实例作为参数从 main() 传递给另一个类对象实例

java - 如何访问作为另一个类中的对象的局部变量? - java

Ruby类方法继承,如何让子方法停止执行?

c++ - 我应该如何实现以派生类型作为参数的纯虚方法?

python - 使用递归返回嵌套列表中第二小的数字

python - scipy eigh 给出正半定矩阵的负特征值

python - 如何让 South 在 Heroku 中为 Django 应用程序工作

python - 如何从另一种语言单词创建英文字母字符串?

java - 骰子声明错误

Java - Junit 测试 OOP 类