2012-07-04 4 views
1

는 다음과 같은 방법을 살펴 가지고 생성되지 대상 :파이썬은 :

def load_ad_mediums_from_file(self, filename): 
    file = io.open(filename, "r") 
    ad_mediums = {} 
    for line in file: 
     if len(line) > 0 and line[0] != 'a': 
      parts = line.strip().split(";") 
      ad_medium = Objects.Ad_Medium() 
      ad_medium.id = int(parts[0]) 
      for i in range(1,8): 
       cat_parts = parts[i].strip().split(",") 
       category_id = int(cat_parts[0]); 
       ad_medium.categories[category_id] = float(cat_parts[1]) 
       ad_medium.impressions[category_id] = int(cat_parts[2]) 

      ad_mediums.update({ ad_medium.id : ad_medium }) 
    file.close() 
    return ad_mediums 

문제 : Althoug 파일의 각 라인은 ad_mediums 사전의 값이 모두 같은 값이 다르다. 마치 새로운 객체 "ad_medium = Objects.Ad_Medium()"을 만드는 것이 효과가 없지만 단순히 이전 루프의 객체에서 값을 덮어 쓰는 것처럼 보입니다.

어떻게 해결할 수 있습니까?

편집 : Ad_Medium 클래스 클래스 정의, ID, 카테고리 및 노출에

class Ad_Medium(object): 

id = 0 
categories = { 1:0.0, 2:0.0, 3:0.0, 4:0.0, 5:0.0, 6:0.0, 7:0.0 } 
impressions = { 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0 } 

def __str__(self): 
    string = str(self.id) + ";" 
    for i in range(1,8): 
     string += str(i) + "," + str(self.categories[i]) + "," + str(self.impressions[i]) + ";" 
    return string[:-1] + "\n" 



def normalize_categories_with_impressions(self): 
    impressions = 0.0 
    for i in range(1,8): 
     impressions += float(self.impressions[i]) 

    if impressions == 0.0: 
     return 

    for i in range(1,8): 
     self.categories[i] = float(self.categories[i])/float(impressions) 



def reset_categories(self): 
    for i in range(1,8): 
     self.categories[i] = 0 
+0

당신이를 게시 할 수있는 속성 : 당신은 당신의 클래스 정의 인스턴스 속성을 만들 이니셜 라이저 방법, 즉 갖고 싶어 'Ad_Medium' 클래스의 관련 부분은 무엇입니까? 인스턴스 수준이 아닌 클래스 수준 (예 : 카테고리) 일 수 있습니다. – DSM

답변

5

(모든 인스턴스에 의해 공유) 클래스 속성입니다. ad_medium.id = int(parts[0]) 문은 'id'인스턴스 속성을 정의하지만 카테고리 및 노출 (리바운드되지 않지만 변형 됨)에 대한 모든 작업은 클래스 속성에서 작동합니다. ,

class Ad_Medium(object): 
    def __init__(self): 
     self.id = 0 
     self.categories = { 1:0.0, 2:0.0, 3:0.0, 4:0.0, 5:0.0, 6:0.0, 7:0.0 } 
     self.impressions = { 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0 } 

난 강력하게 당신이 파이썬의 객체 모델에 대한 자세한 내용은 제안 조회 규칙 등