在 Python 中创建对象列表
Create a list of objects in Python
要创建对象列表:
- 声明一个新变量并将其初始化为一个空列表。
- 使用
for
循环遍历range
对象。 - 实例化一个类以在每次迭代时创建一个对象。
- 将每个对象附加到列表中。
主程序
class Employee(): def __init__(self, id): self.id = id list_of_objects = [] for i in range(5): list_of_objects.append(Employee(i)) print(list_of_objects) for obj in list_of_objects: print(obj.id) # 👉️ 0, 1, 2, 3, 4
我们使用range()
该类来获取range
可以迭代的对象。
range类通常用于在循环中循环特定次数for
。
主程序
print(list(range(5))) # 👉️ [0, 1, 2, 3, 4] print(list(range(1, 6))) # 👉️ [1, 2, 3, 4, 5]
如果您需要从特定数字开始,请将 2 个参数(开始和停止)传递给
range()
类。在每次迭代中,我们使用当前数字创建
Employee
该类的实例并将结果附加到列表中。
list.append
()
方法将一个项目添加到列表的末尾。
该类Employee
可以使用单个id
参数实例化,但根据您的用例,您在创建对象时可能必须传递更多参数。
如果需要更改print()
列表中对象的函数输出,请__repr__()
在类中定义方法。
主程序
class Employee(): def __init__(self, id): self.id = id def __repr__(self): return str(self.id) list_of_objects = [] for i in range(5): list_of_objects.append(Employee(i)) # 👇️ [0, 1, 2, 3, 4] print(list_of_objects)
我们将id
每个对象的 用作print()
函数的输出。
请注意,该__repr__()
方法必须返回一个字符串。
如果您的类没有在其方法中定义所有必要的属性,请使用该函数为每个对象添加属性。
__init__()
setattr()
主程序
class Employee(): def __init__(self, id): self.id = id def __repr__(self): return str(self.id) list_of_objects = [] for i in range(3): obj = Employee(i) setattr(obj, 'topic', 'Python') setattr(obj, 'salary', 100) list_of_objects.append(obj) # 👇️ [0, 1, 2] print(list_of_objects) for obj in list_of_objects: print(getattr(obj, 'topic')) print(getattr(obj, 'salary'))
setattr函数向对象添加属性。
该函数采用以下 3 个参数:
姓名 | 描述 |
---|---|
目的 | 添加属性的对象 |
姓名 | 属性的名称 |
价值 | 属性值 |
该name
字符串可以是现有的或新的属性。
getattr函数返回对象提供的属性的值。
该函数将对象、属性名称和对象上不存在该属性时的默认值作为参数。
或者,您可以使用列表理解。
使用列表理解创建对象列表
要创建对象列表:
- 使用列表理解来迭代
range
对象。 - 在每次迭代中,实例化一个类以创建一个对象。
- 新列表将包含所有新创建的对象。
主程序
class Employee(): def __init__(self, id): self.id = id def __repr__(self): return str(self.id) list_of_objects = [ Employee(i) for i in range(1, 6) ] print(list_of_objects) # 👉️ [1, 2, 3, 4, 5] for obj in list_of_objects: print(obj.id) # 1, 2, 3, 4, 5
我们使用列表理解来迭代range
长度为
5
.
列表推导用于对每个元素执行某些操作或选择满足条件的元素子集。
在每次迭代中,我们实例化Employee
该类以创建一个对象并返回结果。
新列表包含所有新创建的对象。
您选择哪种方法是个人喜好的问题。
列表推导非常直接且易于阅读,但
for
如果您需要向每个对象添加额外的属性或者创建过程更加复杂,则必须使用循环。