2017-01-12 1 views
1

protobuf는 C++/Java 클래스를 생성하며 이들은 인코딩/디코딩을 수행 할 수있는 정적 유형의 클래스입니다. 왜 metaclass 속성을 가진 python 클래스를 생성합니까 : 나는 일반 클래스가 C++/Java 생성 클래스처럼 rpc를 수행하기에 충분할 것이라고 생각합니다.protobuf가 __metaclass__ 속성을 사용하여 파이썬 클래스를 생성하는 이유는 무엇입니까?

왜 파이썬은 동적 클래스를 사용해야합니까? 감사합니다. .

답변

3

주로 읽기 쉽기 때문에.

C++ 및 Java 용 코드 생성기는 생성자 코드와 생성되는 코드를 동시에 따라야하기 때문에 이해하기 어렵고 편집하기가 어렵습니다.

파이썬 코드 생성기는 같은 방식으로 수행되었을 수 있습니다. 그러나 파이썬은 동적 언어이기 때문에 대신 메타 클래스를 사용할 수 있습니다. 본질적으로 이는 대부분의 코드가 런타임에 생성되도록합니다. 메타 클래스는 코드 생성기보다 읽고 편집하기가 훨씬 쉽습니다. 그 이유는이 코드가 모두 똑바로 나온 Python이기 때문입니다.

이제 자바가 비슷한 일을 할 수 있다고 주장 할 수도 있습니다. 매우 간단한 클래스를 생성 한 다음 리플렉션을 사용하여 필드를 읽고 쓰십시오. 그 문제는 Java가 컴파일 된 언어라는 것입니다. 컴파일 된 코드는 리플렉션 기반 코드보다 훨씬 잘 수행됩니다. 그러나 Python은 컴파일되지 않으므로 반향 접근법을 사용하는 데 별다른 불이익이 없습니다. 사실, 파이썬은 동적으로 설계 되었기 때문에 다른 언어에서는 불가능한 많은 트릭을 할 수 있습니다 (그러나 다시는 느립니다).

+0

protobuf의 비단뱀의 깔끔한 속임수를 쓸 수 있습니까? – xosp7tom

+0

죄송합니다. 코드 작업을한지 오래되었습니다. 내가 만든 최적화 중 일부가 마음에 들었지만 더 이상 기억할 수는 없습니다. (파이썬 라이브러리의 대부분은 저에게 쓰여지지 않았지만 그것을 최적화하는 작업을했습니다 ...) –

관련 문제