2016-09-10 2 views
0

지금까지 배웠던 것부터, 파이썬에서 수퍼 클래스의 메타 클래스와 상속은 매우 유사한 목적을 제공하지만 슈퍼 클래스 상속은 더욱 강력합니다.파이썬에서 수퍼 클래스의 상속보다 메타 클래스를 선호하는 이유

왜 내가 슈퍼 클래스 상속보다 메타 클래스를 선호합니까? 어떤 경우에 메타 클래스가 도움이 될까요?

잘못된 가정이 있으면 죄송합니다. 나는 방금 메사추세츠를 배웠다.

+3

"메타 클래스와 파이썬에서 수퍼 클래스의 상속은 매우 비슷한 목적을합니다"- 뭐라구? 그 아이디어는 어디서 났니? 메타 클래스는 매우 다른 역할을합니다. – user2357112

+0

적어도 그것은 메타 클래스를 배우는 사람처럼 저와 매우 흡사합니다. 차이점을 알 수 있습니까? –

답변

1

나는 당신이 오해했다고 생각합니다. 상속은 일반적으로 사용되는 내용을 기본 클래스에 넣고 그로부터 파생함으로써 코드를 재사용하는 고전적인 객체 지향 기술입니다.

간단히 말해서 메타 클래스를 사용하면 클래스 생성 프로세스 (특히 __new__ 메소드)를 사용자 정의 할 수 있으므로 속성 및 이와 유사한 것을 동적으로 추가 할 수 있습니다. 조금 복잡하고 대부분의 경우이 필요가 없습니다. 이 대답에 대한 자세한 내용이 있습니다. What is a metaclass in Python?

+0

왜 생성 프로세스를 사용자 정의하고 싶습니까? –

+1

"메타 클래스를 사용하면 클래스 생성 프로세스를 사용자 정의 할 수 있습니다."- 생성 프로세스 이외의 많은 것을 사용자 정의 할 수 있습니다. [Color [ 'red']'가 작동하고 의미있는 것이있는 곳에서 'Color'클래스를 원하십니까?] (https://docs.python.org/3/library/enum.html) 메타 클래스를 사용하면 그렇게 할 수 있습니다. [당신이'thing'이 iterable 일 때만'isinstance (thing, Iterable)'이 참인 클래스'Iterable'을 원합니까?] (https://docs.python.org/3/library/collections.abc.html)) 메타 클래스로 그렇게 할 수 있습니다. – user2357112

+0

아마도 미리 생성 된 클래스 집합 중 하나 (예 : 스레드 풀과 같은) 또는 ORM과 같은 (아마도 ORM과 같은) 하나만 반환하도록하려면 db 열에 대해 여러 속성이있는 클래스를 만듭니다 (예 : 날짜, 이름 등) 그리고 당신은 자동으로 "filter_by_date", "filter_by_name"등과 같은 메소드를 얻습니다. –

관련 문제