C API와 함께 파이썬으로 선언 된 파이썬 클래스 인스턴스 생성

StackOverflow https://stackoverflow.com/questions/1147452

  •  18-09-2019
  •  | 
  •  

문제

나는 정의 된 파이썬 클래스의 인스턴스를 만들고 싶습니다. __main__ C API의 범위.

예를 들어, 클래스가 호출됩니다 MyClass 다음과 같이 정의됩니다.

class MyClass:
    def __init__(self):
        pass

수업 유형은 아래에 산다 __main__ 범위.

C 응용 프로그램 내 에서이 클래스의 인스턴스를 만들고 싶습니다. 이것은 단순히 가능할 수있었습니다 PyInstance_New 클래스 이름이 필요합니다. 그러나이 함수는 Python3에서 사용할 수 없습니다.

대안에 대한 모든 도움이나 제안에 감사드립니다.

고마워요, 폴

도움이 되었습니까?

해결책

가장 간단한 접근법은 다음과 같습니다.

/* get sys.modules dict */
PyObject* sys_mod_dict = PyImport_GetModuleDict();
/* get the __main__ module object */
PyObject* main_mod = PyMapping_GetItemString(sys_mod_dict, "__main__");
/* call the class inside the __main__ module */
PyObject* instance = PyObject_CallMethod(main_mod, "MyClass", "");

물론 오류 확인. 당신은 decref 만 필요합니다 instance 당신이 그것을 끝내면, 다른 두 사람은 빌린 참조입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top