2010-07-06 3 views
1

나는 파이썬으로 사람 클래스 용으로 설계된 클래스 모델을 가지고있다. 어떤 사람은 학생이고 0,1 또는 많은 고문을 가질 수 있습니다. 사람은 또한 이름, 학교, 졸업 년도, 그가 일한 분류, 얻은 학위 등의 다른 속성을 가질 수 있습니다.python - 재귀 호출

클래스의 각 속성에 대한 메소드를 설정하고 가져 왔습니다. Ex. set_advisor (self, advisor)는 고문을 학생 고문 목록에 삽입합니다. set_year (self, year) 학생의 졸업 연도를 설정합니다.

마찬가지로 get_advisor (self)는 학생의 고문을 반환합니다. 등등 ..

마지막으로 개체를 채우고 이름을 사람으로 지정합니다. 나는 몇 년에 졸업 한 학생의 목록을 얻으려면

난 그냥 교수가 몇 년에 졸업 한 학생들 say..list, 쿼리를 작성하려면 지금

print [people[p].name for p in people if people[p].year="YEAR"] 

쓰기 난 단지 1990 년에 졸업 한 사람들을 추적하기 위해 재귀 쿼리를 작성하려면 지금 .. 일부 "ABC"... 는 예를 들어, 데이터 셋과 같습니다 말을 다시

person a graduated in year 1990 
person b graduated in year 1990 
person c graduated in year 1991 
person d graduated in year 1990 
person a was advised by person e 
person e was advised by person f 
person f was advised by person g 
person g was advised by person abc 

person b was advised by person i 
person i was advised by person abc 

person c was advised by person abc 

person d was advised by person h 
person h was advised by person k 

을 추적하고 그 고문 ABC으로 추적 위의 경우 그것은 a와 b만을 결과로 가져와야합니다.

어떻게해야합니까? 나는 문법에 문제가 있고 위 질문을 공식화 한 것과 같은 용어로 query.Like를 공식화하고있다. 누구든지이 문제를 해결할 수 있습니까?

비슷하게 .. 나는 어떤 종류의 일을하고 같은 해 졸업 한 학생들의 쌍을 얻기 위해 질의를 작성하고 ... 어떻게 작성합니까? 또한 그들의 고문에게도 같은 분류 작업을 시켰습니다.

감사합니다.

당신이 좋아하는 뭔가 클래스의 메소드를 작성할 수

답변

1

: 당신이 좋아하는 일을 조회 할 것이다

has_advisor(self, advisor): 
    if not self.advisor: 
     return False 
    elif advisor in self.advisor: 
     return True 
    else 
     return self.advisor.has_advisor(advisor) 

이 큰 데이터 세트와 함께 매우 빠르게 매우 비싼 얻을 것이다

e = people['e'] 
e_in_advisor_tree_and_grad_in_1990 = [p for p in people if p.has_advisor(e) and p.year == 1990] 

, 모든 그 중 동시에 메모리에 보관됩니다.

+0

이 경우 self.advisor는 문자열 목록 일 가능성이 높기 때문에 재귀 적 .has_advisor가 작동하지 않을 수 있습니다. –

+0

가 유망 해 보인다. 내가 그것을 되찾고 업데이 트하자마자 시도 할 것입니다. – Anu

+0

@Blair - 의존합니다. self.advisor가 string의리스트라면, 우리는 'people [adv_name]을 adv_name의 어드바이저로 대체 할 수 있습니다.' – Benj