2
C++로 작성된 Python 확장 모듈을 Boost.Python에서 SWIG로 이식 중입니다.SWIG를 사용하여 Python __init__ 함수에서 C++ 팩토리 메서드를 래핑하는 방법
는 C++ 코드는 정적 팩토리 메소드
class X {
public:
static X* create(const char* descr);
...
};
공장 방법은 몇 가지 파생 클래스의 인스턴스에 대한 포인터를 반환과 추상 클래스 X
을 정의합니다. 당신이 X::create
를 호출하는
__init__(self, descr)
방법이있는 파이썬 클래스 X
에서 C++ 클래스 X
을 래핑 할 수 Boost.Python으로
. 사실, 다음과 같이 수행됩니다 :
namespace bp = boost::python;
bp::class_<X>("X", boost::no_init)
.def("__init__", bp::make_constructor(&X::create))
...
SWIG와 같은 일을하는 방법이 있습니까?
C++ 코드가 생성자를 사용하지 않는 이유가 있습니까? 공장 기능이 수용 할 수없는 이유로 공장 기능을 반영하는 이유가 있습니까? –
factor 함수를'__init__'보다는'__new__'으로 사용하는 것이 더 적절하지 않습니까? – Marcin
@ user763305 :'__new__'은 객체 생성을 제어하기 때문에 올바른 장소입니다. '__init__'는 인스턴스 상태 초기화를 제어합니다 – Daenyth