方法更改列表内的所有类实例

时间:2014-09-24 12:06:01

标签: python list

在我的脚本中,我有这些类:

class action:
  def __init__(self,ac_type,ac_date):
    self.ac_type = ac_type
    self.ac_date = ac_date

class user:
  actions = []
  def __init__(self,i_id):
    self.ivi_id = i_id
  def add(self,act):
    self.actions.append(act)
  def get_len(self):
    return len(self.actions)

我想创建"用户"的列表元素并添加到一些主题动作。我通过以下方式执行此操作:

for i in range(len(data_queue)):
  ind = users_id.index(data_queue[i].i_id);
  act = action(0,data_queue[i].added)
  users[ind].add(act)

但是在运行之后我看到data_queue中的每个操作都被添加到用户的每个用户中。这是错的!我该怎么改变?

1 个答案:

答案 0 :(得分:3)

代码使用的是class属性,它由类的所有实例和类本身共享。

改为使用实例属性:

class user:
    def __init__(self,i_id):
        self.ivi_id = i_id
        self.actions = []
    def add(self,act):
        self.actions.append(act)
    def get_len(self):
        return len(self.actions)
BTW,代码使用索引来迭代序列data_queue。只是迭代序列,除非你真的需要索引。

for queue in data_queue:
    ind = users_id.index(queue.i_id)
    act = action(0, queue.added)
    users[ind].add(act)