2011-11-04 2 views
2

CPython C++에서 파이썬 클래스로 정적 메소드 나 변수를 지정하는 방법은 무엇입니까?C++의 파이썬 클래스에서 정적 변수를 지정하십시오.

PyTypeObject 구조에서 tp_getset, tp_methods, tp_members는 모두 클래스의 인스턴스를 가정합니다.

대단히 감사합니다. Rob.

+0

http://stackoverflow.com/questions/68645/static-class-variables-in-python –

+0

http://docs.python.org/extending/extending.html –

+0

첫 번째 링크는 C++ 을 참조하십시오. 반면 두 번째 링크는 파이썬 클래스의 정적 변수를 참조하지 않습니다. 내 질문과 관련된 누락 된 링크가 있습니까? 감사합니다 – rbairos

답변

1

정적 클래스 및 메소드는 PyMethodDef 구조의 ml_flags 필드 METH_STATIC 또는 METH_CLASStp_methods을 추가로 정의 할 수있다. 이는 @staticmethod@classmethod 데코레이터와 동일합니다.

일반적으로 인스턴스 포인터 인 메서드의 첫 번째 매개 변수는 정적 메서드의 경우 NULL이고 클래스 메서드의 경우 PyTypeObject*이됩니다.

http://docs.python.org/c-api/structures.html#PyMethodDef

클래스 속성 (모듈 초기화 함수에서) PyType_Ready()를 호출하기 전에이 속성을 사전에 tp_dict를 설정하여 추가 할 수 있습니다. 또는 tp_dictNULL으로 남겨 둘 수 있습니다.이 경우 PyType_Ready()이 당신을 대신하여 작성합니다. 그런 다음 해당 특성에 특성을 추가 할 수 있습니다.

http://docs.python.org/c-api/typeobj.html#tp_dict

계산 된 클래스 속성은 정확하게 파이썬에서 같은 기술자 클래스를 필요로한다. 그런 다음 다른 클래스 속성과 마찬가지로 설명자의 인스턴스를 tp_dict에 추가해야합니다.

관련 문제