2012-09-03 111 views
0

我有下面的代码Python中添加对象的for循环

old_county_code = -1 
    old_placement_id = -1 
    placements = [] 
    for row in raw_data: #raw_data is one line from the database retrieved by cursor.fetchall() 

     placement_id = row[1] 
     if placement_id != old_placement_id: 
      placement = Objects.placement() 
      placement.placement_id = placement_id 
      placements.append(placement) 

     country_code = row[3] 
     if old_county_code != country_code: 
      country = Objects.country() 
      country.country_id = country_code 
      placement.countries.append(country)     

     creative = Objects.creative(row[2], row[0], row[4], row[5], row[6], row[7]) 
     country.creatives.append(creative) 

     old_placement_id = placement_id 
     old_county_code = country_code 

对象配置包含本身包含广告的列表国家名单。因此,当我运行此代码时,我注意到每个展示位置都包含与列表对象placement.countries中包含的国家对象完全相同的数量。事实上,情况并非如此。我认为我在代码中做了一些错误,但我不知道是什么。

这是对象的代码

class placement(object): 
    placement_id = 0 
    countries = [] 

class country(object): 
    country_id = 0 
    creatives = [] 

class creative(object): 
    creative_id = 0 
    matching_id = 0 
    clicks = 0 
    impressions = 0 
    ctr = 0.0 
    rank = 0.0 
+3

不知道你的努力从您的文章做......做一个小例子(非常小),并显示所有输入和所有输出然后把你的预期输出 –

+1

另请参见[这个问题](http://stackoverflow.com/questions/8860447/why-does-python-seem-to-treat -instance变量-作为共享对象之间-)。这是一个“类与实例”变量问题。 – DSM

+1

http://sscce.org/ – Marcin

回答

0

使基础,而不是基于类的内部变量实例....

class placement(object): 
    def __init__(self): 
    self.placement_id = 0 
    self.countries = [] 

class country(object): 
    def __init__(self): 
    self.country_id = 0 
    self.creatives = [] 

class creative(object): 
    def __init__(self) 
    self.creative_id = 0 
    self.matching_id = 0 
    self.clicks = 0 
    self.impressions = 0 
    self.ctr = 0.0 
    self.rank = 0.0