작성
·
352
답변 1
0
안녕하세요.
클래스 안에 Meta 라는 이름의 클래스를 선언하는 것의 장고 만의 약속입니다. 클래스 안에 클래스를 선언하는 단순한 문법이며, 클래스 변수 문법을 통해 이해할 수 있습니다. 파이썬 고급 문법 중에 metaclass 문법와는 관련이 없습니다.
장고는 모델 클래스나 ModelForm 클래스에 대한 메타정보(설정)를 저장할 방법으로서 클래스 문법을 사용한 것 뿐입니다. 아래의 코드는 PostForm 클래스에 대한 메타정보로서 참조할 model 로서 Post 클래스를 사용하고, 참조할 fields는 ["title"] 를 참조하겠다는 일종의 선언입니다.
class Meta 는 클래스지만 인스턴스를 만드는 목적으로 사용하지는 않습니다. 클래스 변수로서만 사용합니다.
아래는 파이썬 클래스에서 var1 는 클래스 변수이며, var2 는 인스턴스 변수입니다. var1은 클래스 변수이기에 Person.var1 과 같이 접근할 수 있습니다.
위 PostForm 의 Meta 역시 PostForm 입장에서는 클래스 변수 공간에 Meta가 정의된 것입니다. 그래서 PostForm.Meta 형태로서 접근할 수 있습니다. PostForm.Meta.model 과 같은 접근도 가능하겠죠.
화이팅입니다. :-)
답변감사합니다. 덕분에 시간을 아낄 수 있었네요.
답변을 보니 여쭤보고 싶은 내용이 생겼는데요, 저러한 방식의 문법(중첩클래스라 부르겠습니다)이 클래스전체에서 통용되는 클래스변수를 선언하기 위함이라하면, 굳이 중첩클래스를 사용할 필요가 있나요? 그냥 클래스변수로서 바로 클래스내부에 바로 선언해주면 되는 것이 아닌지 궁금합니다.