2014-04-30 3 views
1

저는 초보 프로그래머입니다. 따라서 파이썬에 특정한 어휘를 사용하지 않아서 용서해주십시오.파이썬에서 객체 인스턴스의 특정 속성 반복하기

은 가정하자 나는 텍스트를 추가 하나이 클래스 (기록을) 호출 한 여러 인스턴스를 생성하는 클래스를 CarSpecs 카레 확인 속성 모델컬러을 정의 파일명이 인 SuperCars입니다. 내 프로그램에서해야 할 일은 전체 파일을 읽고 빨간색 인 자동차 수를 반환하는 것입니다. 즉, 각 인스턴스의 색상을 찾습니다.

class Carspecs(object): 
    def __init__(self, carreg, make, model, color):  
     self.CarReg = carreg 
     self.Make = make 
     self.Model = model 
     self.Color = color 

가 그럼 난 여러 인스턴스를 생성하고 인스턴스를 추가하는 기능을 정의 (또는 '기록'말할 수 :

클래스를 정의 : 여기

내가 지금까지 한 일이다 ') 초차에 :

I 출력 옆에 빨간 자동차의 수를합니까 무엇
def addCar(CarRecord): 
    import pickle 
     CarFile = open('Supercars', 'ab') 
     pickle.dump(CarRecord, CarFile) 
     CarFile.close() 

?

답변

1

이 파일을 다시 열어 모든 레코드를 읽고 Color 속성이 빨간색인지 확인해야합니다. , 난 당신이 목록에 데이터를 저장하고 목록을 피클 제안

>>> with open('Supercars', 'rb') as f: 
... data = [] 
... while True: 
...  try: 
...   data.append(pickle.load(f)) 
...  except EOFError: 
...   break 
... 
>>> 
>>> print(x for x in data if x.Color == 'red') 

사용하지 않아도 이런 식으로 : 당신이 피클에서 각 인스턴스를 저장하고 있기 때문에 다음과 같은 것을해야 할 것 그 해키 루프 얻을 모두 항목. 그러한 목록을 저장하는 것은 쉽습니다. 당신은 CarSpec -objects의 목록을 작성 목록 records에서 그들을 저장 한 가정

>>> with open('Supercars', 'wb') as f: 
... pickle.dump(records, f) 
... 
>>> 

후는 것만큼이나 간단 읽기 :

>>> with open('Supercars', 'rb') as f: 
...  data = pickle.load(f) 
... 
>>> 

그리고 당신도 쉽게 필터링 할 수 있습니다 :

>>> with open('Supercars', 'rb') as f: 
...  data = [x for x in pickle.load(f) if x.Color == 'Red'] 
... 
>>> 

당신은 당신이 바로 붉은 색으로 records -list 및 인쇄 자동차를 반복 할 수있는 피클에 저장되기 전에 표시하려면

.

+0

이렇게 정교한 답장을 보내 주셔서 감사합니다. –