2010-08-16 4 views
6

안녕하세요 스택 오버플 명의 참여자는 매개 변수화 된 클래스와 메타 클래스의 차이점은 무엇입니까 (Python의 코드 예제를 참조하십시오)?

내가 지금 파이썬을 배우는 초보 프로그래머 해요, 나는 객체 지향 패러다임을 설명하는 데 도움이 this site에왔다. 나는 메타 클래스가 클래스의 클래스 (메타 디렉토리는 디렉토리의 디렉토리 등)라는 것을 알고 있지만, 나는 뭔가 문제가있다. 메타 클래스와 매개 변수화 된 클래스의 실제 차이점은 무엇인가? 웹 사이트의 정의?

가능한 경우 파이썬에서 코드 예제를 포함시켜주십시오. 도와 줘서 고마워!

답변

14

파이썬에는 "매개 변수화 된 클래스"가 없으므로 (또는 필요한) 파이썬에서 예제를 제공하기가 어렵습니다 ;-). 메타 클래스는 간단히 "클래스의 클래스"입니다. 일반적으로 type (길고, Py2에서는 object이나 다른 기본 제공 유형 또는 다른 새로운 스타일의 클래스를 상속하여 클래스를 새로운 스타일로 만들었습니다. - 구식 클래스는 Py2의 유산이며, 다행스럽게도 Py3에서는 사라졌으며, 이상적으로는 잊어 버려야합니다. 몇 가지 고급 목적을 위해 사용자 정의 메타 클래스 (일반적으로 서브 클래스 type)를 만들 수 있지만, 이 필요하지는 않습니다 (특히, Python 2.6부터 사용자 정의 메타 클래스를 요구하는 많은 부분이 클래스 데코레이터로 더 간단하게 완료).

클래스 C가 주어지면 type(C)은 메타 클래스입니다.

매개 변수화 된 클래스는 완전히 다른 개념입니다. 파이썬에서 올 수있는 가장 가까운 아마 인수를 기반으로 클래스를 만들고 반환하는 공장 기능입니다 :

def silly(n): 
    class Silly(object): 
     buh = ' '.join(n * ['hello']) 
    return Silly 

Silly1 = silly(1) 
Silly2 = silly(2) 
a = Silly1() 
print(a.buh) 
b = Silly2() 
print(b.buh) 

가 다시

hello 
hello hello 

인쇄됩니다, 그것은 '하지 뭔가 당신에게 확실히이다 하나 또는 몇 개의 인수만으로 여러 클래스를 만드는 경우가 종종 있습니다. 어쨌든, 당신이 볼 수 있듯이,이 클래스의 클래스 (AKA 메타 클래스)와는 아무런 관련이 없습니다.이 예제에서는 항상 type입니다. (거의 모든 현실적인 예에서 생각해 볼 수 있습니다. 예를 들어, 이것을 수행하는 지점이 현실적이고 따라서 필수적으로 매우 복잡한 것보다는 분별하기 어렵다.

+0

나는 며칠 전 Py3로 바꿨다. 나는 지금 당장 학생이기 때문에 내일의 '새로운 것'을 배워야한다고 생각했다. 맞춰보세요. 똑똑한 움직임이었습니다 :-) – yrsnkd

+0

+1. 좋은 설명. –

+0

+1 항상 훌륭한 설명. – katrielalex

0

write up이 도움이 될 수 있습니다. 그리고 this one은 올드이지만 읽을만한 가치가 있습니다. 나는 이것이 당신의 질문에 완전히 대답하지 않는다는 것을 알고 있습니다. 그러나 그것은 당신에게 생각을위한 음식을 제공하기를 바랍니다.

관련 문제