【问题标题】:Variable automatic assignment and incrementation变量自动赋值和递增
【发布时间】:2020-04-11 18:47:31
【问题描述】:

我正在创建一个接收 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)递增以进行赋值?

【问题讨论】:

  • 为什么不让你的构造函数获取属性列表?

标签: python class variables variable-assignment


【解决方案1】:

请在提问时格式化您的代码。

创建对象并将它们放入列表中是否适合您?

试试这样的:

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]

我正在利用列表推导和数据类来更好地写出来。

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 2018-09-08
    • 2017-06-20
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2020-02-10
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多