2011-01-01 5 views
6

이것은 OOP에 대한 매우 기본적인 질문입니다. (저는 파이썬을 사용하고 있지만 개념적 질문이므로 실제 언어와는 다릅니다.) 둘러 보았지만 튜토리얼이나 책은이 특정 질문을 다루지 않습니다. 내가 분명하지 않다면 사과를하고 내가 작성한 것을 분명히 밝힐 수있다.OOP 및 지속성에 대한 초보자의 개념적 질문

내가 pickle을 사용하여 디스크에 쓰려는 간단한 주소록을 만들고 있다고 가정 해 보겠습니다. 나는 Contact이라고 불리는 클래스를 가지고 있는데, __init__은 몇개의 인자 (firstName과 lastName)를 가져오고 연락처를 생성하고 편집 할 수있는 메뉴를 가지고 있습니다. OOP의 모든 예제들에 대해 나는 그들이 비슷한 것을 할 것이라고 봤습니다 ...

bob = Contact('Bob', 'Smith') 
jane = Contact('Jane', 'Smith') 

... 연락처의 새 인스턴스를 만드는 중입니다. 그러나 이들은 모두 런타임 전에 정의됩니다. 사용자 입력에 의해 생성 된 모든 인스턴스를 원할 때 어떻게됩니까? 각 사람마다 새 인스턴스를 만듭니 까? 어떻게하면 사용자 입력에서이 작업을 수행 할 수 있습니까? 그런 다음 모든 인스턴스를 목록에 작성하고 피클 링하십시오. 또는 당신은 ... 뭔가 좋아합니까

firstName, lastName = raw_input("Enter first name: "), raw_input("Enter last name: ")  
contact = Contact(firstName, lastName) 

... 그럼 그냥 목록에 연락처를 추가, 접촉, 예를 들어 내가 사용자를 추가 할 때마다 새 값을 얻을? 이것은 내가 실제로 얻지 못하는 핵심 개념입니다 (왜냐하면 나는 그것이 실제로 어디에서나 설명 된 것을 보지 못했기 때문입니다). 필자가 본 모든 예제는 위의 작업을 수행하지 않고 대신 각 인스턴스/사람에 대한 새 인스턴스를 작성하지만 모두 미리 정의되어 있으며 즉시 작성되지는 않습니다. 나는 누군가이 개념을 나에게 설명해 주셔서 정말로 감사 할 것입니다.

답변

1

네, 일반적으로 그렇게하는 방법입니다 - 개체의 배열을 만드십시오. 또는 언어 및/또는 프레임 워크에 따라 다른 종류의 컬렉션이 있습니다. 새 객체를 만들 때 먼저 임시 변수에 객체를 만든 다음 컬렉션에 삽입합니다.

가끔 많은 양의 객체가있는 경우 DB 또는 파일과 같이 영구 저장 영역에서 한 번에 모두로드하지 마십시오. 당신은 작업 할 필요가있는 것을로드합니다. 하나만로드하면 특수 변수가 생길 수 있습니다. 여러 사람들이 다시 컬렉션을 얻을 것입니다.

+0

입력 된 데이터를 인스턴스의 이름으로 만들 수 있습니까? 아니면 완전히 불필요한가요? 아니면 가능합니까? 나는 같은 것을 생각하고있다. ... first_name = raw_input ("당신의 이름은 무엇입니까?") lastName = raw_input ("성은 무엇입니까?") eval (firstName) = Contact firstName, lastName) – johnharris85

+1

@JHarris - 언어에 따라 다릅니다. PHP와 Javascript가 이것을 할 수 있습니다. C++/C#은 할 수 없습니다. 그러나 이것이 올바른 사고 방식이라고 생각하지 않습니다. 연락처를 이름으로보고 싶다면 "사전"(일부 언어에서는 "지도") 유형의 컬렉션을 사용하십시오. 이와 같이 각 연락처에 대한 변수를 사용하여 네임 스페이스를 오염시키는 것은 낭비적이고 매우 위험합니다 (누군가가 변수 중 하나와 같은 이름으로 연락처를 만들면 어떻게됩니까?) –

3

귀하의 예는 정확하게 작동하는 방식입니다.