2014-07-23 3 views
0

무엇이 문제입니까?파이썬 재귀 클래스 참조 - 트리 만드는 법

class Cat(): 
    parent = Cat() 

NameError: name 'Cat' is not defined

내가하고 싶었던 모든 카테고리 객체의 트리를 생성하기 위해 중첩 될 수있는 클래스를 만드는 것이 었습니다. 이 작업을 수행하는 표준 방법은 무엇입니까?

나는 이것을 장고에서 모델로 만들고 SQLite3과 동기화 할 것입니다. 저는 파이썬 초보자입니다. 죄송합니다 ...

+2

'고양이'의 부모가 모두 새로운 '고양이'이기 때문에 무한히 반복하지 않고 정확히 어떻게 할 계획입니까? – TheSoundDefense

+0

답장을 보내 주셔서 감사합니다. 그것은 중복이며 여기에 답변 : http://stackoverflow.com/a/1020431/1369798 – Alveoli

+0

짧은 대답은 : 클래스 고양이 (자기) : 부모 = ForeignKey ('자기') – Alveoli

답변

3

Cat 클래스 정의가 완료되기 전에 Cat 개체를 만들려고합니다.

이 버전은 구문 적으로 법적,하지만 고양이의 무한 목록을 작성합니다 : 어쩌면

class Cat(): 
    def __init__(self, parent=None): 
     self.parent = parent 
+1

이것은 무한히 재발하고, 그것? – TheSoundDefense

+0

예. 첫 번째 버전은 출시 될 예정이지만 두 번째 버전은 그가 원하는 버전 일 것입니다. –

1
class Cat: 
    def __init__(self,parent): 
     self.parent = parent 

Cat(Cat("dog")) 

:

class Cat(): 
    def __init__(self): 
     self.parent = Cat() 

이 같은 당신이 아마 원하는이다?

1

무한 재귀 문제 외에도 무언가를 일반 클래스로 모델링 한 다음 나중에이를 장고 모델로 변환하는 방법에 대해 생각하는 것은 실수입니다. 이것은 object-relational impedence mismatch 때문에입니다 : Django 모델은 데이터베이스에 저장 될 예정이며 관계형 dbs는 절대로 oop 개념과 완벽하게 일치하지 않습니다.

다행스럽게도 MPTT 인 Spring 계층 적 데이터에 대해서는 매우 좋은 알고리즘이 존재하며 장고 구현에는 django-mptt이 있습니다.