![]() ![]() ![]() | |
![]() Reference부분만을 객체로 만든것의 리스트입니다. 객체라는 말이 중요합니다. 인스턴스라고도 하지요 객체는 속성과 메쏘드를 갖습니다. 클래스는 객체를 만들어내는 붕어빵틀같은겁니다. 예를들어, 과일 이란 클래스가 있으면, 사과는 과일이란 클래스의 붕어빵틀에서 만들어진 붕어빵 즉 객체입니다. 사과의 속성에는 색깔, 경도등이 있습니다. 사과.색깔 = '빨강' 사과.경도 = '단단함' 속성이 어떤것들이 있는지는 클래스에서 정의합니다. 실제 속성값이 어떤지는 객체마다 다릅니다. 메쏘드란 것도 있습니다. 객체의 행동을 정의한것이죠 속성이 형용사면 메쏘드는 동사입니다. 사과.익는다 사과.상한다 등이 있을 수 있습니다. 과일은 클래스고, 사과는 객체입니다. 바나나도 과일클래스의 객체죠. 속성과 메쏘드들이 사과랑 약간은 다르지요. 지금 질문하신 ref안의 내용들이 바로 객체입니다. 그렇담 ref를 만들어낸 붕어빵틀 즉 클래스는 뭐냐하니 Bio\GenBank\Record.py 안에 정의된 Reference라는 클래스입니다. 그 클래스가 만들어낸 객체(인스턴스)가 바로, ref 리스트내에 있는 녀석들입죠.... 파이썬에서는 객체를 그냥 print하면, <Bio.GenBank.Record.Reference instance at 0x0179E140> 라고만 찍습니다. 다양한 속성과 메쏘드들을 가진녀석을 어떻게 프린트하겠습니까? ^^; Bio\GenBank\Record.py 의 class Reference를 보시면, 그녀석의 속성과 메쏘드들을 알수 있죠 소스를 보니 보니깐, 다음의 속성들이 보이는군요 def __init__(self): self.number = '' self.bases = '' self.authors = '' self.title = '' self.journal = '' self.medline_id = '' self.pubmed_id = '' self.remark = 이얘긴 뭐냐하니. 그 객체.number하면 number를 문자열형식으로 볼수 있다는 겁니다. 따라서, 다음처럼 시도해보시길.. for refObject in ref: print refObject.number, refObject.bases, refObject.authors 그러면, 그 리스트내에 있는 모든 객체에 대해서, 하나씩 (for문을 돌면서) 그 객체의 number속성, bases속성, authors속성이 보일껍니다. 오호... 그 밑에 보니깐, __str__ 이란 메쏘드가 있군요. 이 메쏘드는 해당 객체를 프린트하고자 할때 리턴되는 값을 프린트하는 연산자오버로딩이라고 하는 일종의 내장 메쏘드입니다. 그렇담 다음처럼 해도 됩니다. for refObject in ref: print refObject 바로 위는 다음이랑 똑같은겁니다. for refObject in ref: print refObject.__str__() 그러면 __str__에 표시된것처럼, 저널이름 저자이름등이 모두 합쳐진 문자열이 출력될껍니다. 객체에 대해 감잡히시나요? 이게 감잡히면, 프로그래밍이 쉬워집니다. 프로그램잘하려면, 문제에서 객체를 잘 선별해서 적절한 속성과 메쏘드를 부여하는걸 잘해야합니다. pickle은 객체를 영구히 존속시키고자 할때 쓰는겁니다. 클래스야 소스코드내에 정의되있는것이지만, 클래스에 의해 만들어진 객체는 메모리에만 있는 녀석이죠 따라서 이 내용을 좀 영구히 갖고싶다. (파일에 저장한다 등등..) 할경우에 사용합니다. pickle.dump는 객체를 파일에 쓰는거고 load는 파일로 있는 객체를 다시 메모리로 올리는겁니다. |
![]() ![]() ![]() ![]() ![]() ![]() |