class Meta에 대해 질문입니다.
386
작성한 질문수 49
10:54의 내용을 10:57에 심플하게 바꿀 수 있다고 해주셨는데요
클래스 내부에 클래스가 들어잇는 문법을 처음봐서 찾아보려는데 키워드를 잘모르겠네요
혹시 '메타클래스'라는게 맞을까요? 이렇게 저렇게 찾아봐도 메타클래스에 관한 부분인 것 같긴한데, 또 찾는 자료들에서는 설명해주신 방식으로 메타클래스를 사용하는 걸 못봐가지구요
답변 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 과 같은 접근도 가능하겠죠.
화이팅입니다. :-)
0
답변감사합니다. 덕분에 시간을 아낄 수 있었네요.
답변을 보니 여쭤보고 싶은 내용이 생겼는데요, 저러한 방식의 문법(중첩클래스라 부르겠습니다)이 클래스전체에서 통용되는 클래스변수를 선언하기 위함이라하면, 굳이 중첩클래스를 사용할 필요가 있나요? 그냥 클래스변수로서 바로 클래스내부에 바로 선언해주면 되는 것이 아닌지 궁금합니다.
0
PostForm.Meta.model 과 같은 형태는 2 depth 인데요. 클래스 변수로서 직접 세팅하는 것은 1 depth 씩 밖에 되질 않으니 더 번거로울 수 있습니다. 장고 내부적으로 getattr(new_class, "Meta", None) 과 같이 Meta 속성을 참조하고 있기도 하구요.
그리고 abstract 모델을 상속 시에 Meta 클래스를 상속받는 코드를 작성하기도 합니다.
안녕하세요.
0
62
1
[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?
0
282
1
useEffect 훅에서 else 유무에 따른 결과
0
221
1
useAxios 훅의 dependency array 설정
0
254
1
useEffect에서 변수 업데이트 관련 질문
0
385
1
rest_framework.generics.CreateAPIView의 model 속성 유무
0
273
1
bootstrap4
0
479
4
리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요
1
373
1
admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법
0
577
3
useState는 필수일까요?
0
269
1
python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.
0
606
4
Django allauth를 사용한 소셜 로그인 시 에러
0
657
1
프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러
0
561
2
useLocalStorage() 함수 사용여부
0
233
1
django에 LOGIN_URL = '/accounts/login/'의 의미?
0
451
1
리듀서의 의미 재확인
0
435
1
simple-jwt Refresh Token 사용 노하우
0
903
2
docker compose 를 통한 배포 관련 오류 문의
0
683
1
파이썬 속도 장고 관련 궁금한게 있습니다.
0
368
1
is_like_user
0
236
1
related_name 오류
0
276
1
re_path 오류
0
263
1
re_path url
0
252
1
No post matches the given query
0
667
2





