我正在创建一个接收2个文本文件的小程序。每个文件都包含有关对象或人的信息。每个对象总是有8个项目,每个人总是有7个项目。我设法将这些信息自动放置在列表中,而不考虑文本文件可能显示的对象或人数。因此,我获得了两个主要清单。我们称其为“ D”和“ C”。每个列表都有几个列表,其中包含对象或人的相应信息。
示例:
D = [[att1, att2, att3, att4, att5, att6, att7, att8], [object 2], ..., [n-object]]
c = [[att1, att2, att3, att4, att5, att6, att7], [person 2], ..., [n-person]]
当我使用对象时,我创建了两个不同的类,一个用于处理每个列表。构造函数方法接收每个人或对象的属性。
示例:
class DDD(object):
def __init__(self, att1, att2, att3, att4, att5, att6, att7, att8):
self._att1 = att1
self._att2 = att2
etc etc etc etc
其他班级也一样。
这是我遇到问题的地方。如何为每个对象自动创建实例?困难在于变量的分配。您当然可以创建“ for循环”,并考虑“ len(D)”或“ len(C)”来创建实例。我可以通过索引调用构造函数方法的参数。
喜欢:
for i in D:
X1 = classD(i[0], i[1], i[2], etc etc)
......
我如何自动使变量(X2,X3,X4,Xn)递增以进行分配?
问问题时请格式化您的代码。
是否适合创建对象并将它们放在列表中?
尝试这样的事情:
class DDD(object):
def init(self, att1, att2, att3, att4, att5, att6, att7, att8):
self._att1 = att1
self._att2 = att2
...
people = []
for person in D:
x = DDD(person[0], person[1], ...)
people.append(x)
这样,您将最终获得基于D中数据的DDD对象列表。
如果那是您想要的,那么上面的代码最好写成:
from dataclasses import dataclass
@dataclass
class Person:
attr1: int
attr2: str
...
people = [Person(*person) for person in D]
我利用列表推导和数据类将其写得更好。