{"id":301278,"date":"2020-04-04T09:00:18","date_gmt":"2020-04-04T09:00:18","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=301278"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=301278","title":{"rendered":"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Python-\u043e\u0431\u0432\u044f\u0437\u043a\u0438 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 C\/C++, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SIP. \u0427\u0430\u0441\u0442\u044c 2"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/495636\/\">\u0412 <a href=\"https:\/\/habr.com\/ru\/post\/495480\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 SIP, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Python-\u043e\u0431\u0432\u044f\u0437\u043e\u043a (Python bindings) \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u044f\u0437\u044b\u043a\u0430\u0445 C \u0438 C++. \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SIP \u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438. \u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043e\u0431\u0432\u044f\u0437\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0432\u044f\u0437\u043a\u0443 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C++, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043b\u0430\u0441\u0441\u044b. \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u0434\u043b\u044f \u043d\u0430\u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430\u043c\u0438 \u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 github \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435: <a href=\"https:\/\/github.com\/Jenyay\/sip-examples\" rel=\"nofollow\">https:\/\/github.com\/Jenyay\/sip-examples<\/a>.<\/p>\n<h2> \u0414\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0432\u044f\u0437\u043a\u0443 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C++<\/h2>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 <i>pyfoo_cpp_01<\/i>.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0432\u044f\u0437\u043a\u0443. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 <i>foo<\/i> \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 \u2014 <i>Foo<\/i>. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <i>foo.h<\/i> \u0441 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">#ifndef FOO_LIB #define FOO_LIB  class Foo {     private:         int _int_val;         char* _string_val;     public:         Foo(int int_val, const char* string_val);         virtual ~Foo();          void set_int_val(int val);         int get_int_val();          void set_string_val(const char* val);         char* get_string_val(); };  #endif <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0441 \u0434\u0432\u0443\u043c\u044f \u0433\u0435\u0442\u0442\u0435\u0440\u0430\u043c\u0438 \u0438 \u0441\u0435\u0442\u0442\u0435\u0440\u0430\u043c\u0438, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>int<\/i> \u0438 <i>char*<\/i>. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">#include &lt;string.h&gt;  #include &quot;foo.h&quot;  Foo::Foo(int int_val, const char* string_val): _int_val(int_val) {     _string_val = nullptr;     set_string_val(string_val); }  Foo::~Foo(){     delete[] _string_val;     _string_val = nullptr; }  void Foo::set_int_val(int val) {     _int_val = val; }  int Foo::get_int_val() {     return _int_val; }  void Foo::set_string_val(const char* val) {     if (_string_val != nullptr) {         delete[] _string_val;     }      auto count = strlen(val) + 1;     _string_val = new char[count];     strcpy(_string_val, val); }  char* Foo::get_string_val() {     return _string_val; } <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u043f\u0430\u043f\u043a\u0435 <i>foo<\/i> \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b <i>main.cpp<\/i>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 <i>Foo<\/i>:<\/p>\n<pre><code class=\"cpp\">#include &lt;iostream&gt;  #include &quot;foo.h&quot;  using std::cout; using std::endl;  int main(int argc, char* argv[]) {     auto foo = Foo(10, &quot;Hello&quot;);     cout &lt;&lt; &quot;int_val: &quot; &lt;&lt; foo.get_int_val() &lt;&lt; endl;     cout &lt;&lt; &quot;string_val: &quot; &lt;&lt; foo.get_string_val() &lt;&lt; endl;      foo.set_int_val(0);     foo.set_string_val(&quot;Hello world!&quot;);      cout &lt;&lt; &quot;int_val: &quot; &lt;&lt; foo.get_int_val() &lt;&lt; endl;     cout &lt;&lt; &quot;string_val: &quot; &lt;&lt; foo.get_string_val() &lt;&lt; endl; } <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <i>foo<\/i> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 <i>Makefile<\/i>:<\/p>\n<pre><code class=\"plaintext\">CC=g++ CFLAGS=-c -fPIC DIR_OUT=bin  all: main  main: main.o libfoo.a     $(CC) $(DIR_OUT)\/main.o -L$(DIR_OUT) -lfoo -o $(DIR_OUT)\/main  main.o: makedir main.cpp     $(CC) $(CFLAGS) main.cpp -o $(DIR_OUT)\/main.o  libfoo.a: makedir foo.cpp     $(CC) $(CFLAGS) foo.cpp -o $(DIR_OUT)\/foo.o     ar rcs $(DIR_OUT)\/libfoo.a $(DIR_OUT)\/foo.o  makedir:     mkdir -p $(DIR_OUT)  clean:     rm -rf $(DIR_OUT)\/* <\/code><\/pre>\n<p>  \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 <i>Makefile<\/i> \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u043f\u043e\u043c\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0441 <i>gcc<\/i> \u043d\u0430 <i>g++<\/i>, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>-fPIC<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u00ab\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e-\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u043a\u043e\u0434\u00bb). \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b, \u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u0435\u043b\u0430\u0435\u0442 \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0432\u044f\u0437\u043a\u0443 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0424\u0430\u0439\u043b\u044b <i>pyproject.toml<\/i> \u0438 <i>project.py<\/i> \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438. \u0412\u043e\u0442 \u043a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0444\u0430\u0439\u043b <i>pyproject.toml<\/i>:<\/p>\n<pre><code class=\"plaintext\">[build-system] requires = [&quot;sip &gt;=5, &lt;6&quot;] build-backend = &quot;sipbuild.api&quot;  [tool.sip.metadata] name = &quot;pyfoocpp&quot; version = &quot;0.1&quot; license = &quot;MIT&quot;  [tool.sip.bindings.pyfoocpp] headers = [&quot;foo.h&quot;] libraries = [&quot;foo&quot;] <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C++ \u0431\u0443\u0434\u0443\u0442 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 Python-\u043f\u0430\u043a\u0435\u0442 <i>pyfoocpp<\/i>, \u044d\u0442\u043e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435. <\/p>\n<p>  \u0424\u0430\u0439\u043b <i>project.py<\/i> \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <i>pyfoo_c_04<\/i>:<\/p>\n<pre><code class=\"python\">import os import subprocess  from sipbuild import Project  class FooProject(Project):     def _build_foo(self):         cwd = os.path.abspath('foo')         subprocess.run(['make'], cwd=cwd, capture_output=True, check=True)      def build(self):         self._build_foo()         super().build()      def build_sdist(self, sdist_directory):         self._build_foo()         return super().build_sdist(sdist_directory)      def build_wheel(self, wheel_directory):         self._build_foo()         return super().build_wheel(wheel_directory)      def install(self):         self._build_foo()         super().install() <\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0444\u0430\u0439\u043b <i>pyfoocpp.sip<\/i> \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e Python-\u043c\u043e\u0434\u0443\u043b\u044f: \u0447\u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432 \u0441\u0435\u0431\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0442.\u0434. \u0424\u0430\u0439\u043b .sip \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0445\u043e\u0442\u044c \u0443 \u043d\u0438\u0445 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e. \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u043e\u0433\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435. \u0422.\u0435. \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0444\u0430\u0439\u043b\u0435 .sip \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0434 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b, \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0432 \u044f\u0437\u044b\u043a\u0435 Python, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. \u0412 \u0444\u0430\u0439\u043b\u0435 <i>pyfoocpp.sip<\/i> \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0435 \u0434\u043b\u044f \u043d\u0430\u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b. <\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442:<\/p>\n<pre><code class=\"cpp\">%Module(name=foocpp, language=&quot;C++&quot;) %DefaultEncoding &quot;UTF-8&quot;  class Foo {     %TypeHeaderCode     #include &lt;foo.h&gt;     %End      public:         Foo(int, const char*);          void set_int_val(int);         int get_int_val();          void set_string_val(const char*);         char* get_string_val(); }; <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u043c \u0443\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u044b \u043f\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c. \u0412 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 <i>%Module<\/i> \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u043c\u044f Python-\u043c\u043e\u0434\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d (\u0442.\u0435. \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b <i>import foocpp<\/i> \u0438\u043b\u0438 <i>from foocpp import &#8230;<\/i>. \u0412 \u044d\u0442\u043e\u0439 \u0436\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u044f\u0437\u044b\u043a \u0443 \u043d\u0430\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u2014 C++. \u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <i>%DefaultEncoding<\/i> \u0437\u0430\u0434\u0430\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 Python \u0432 \u0442\u0438\u043f\u044b <i>char<\/i>, <i>const char<\/i>, <i>char*<\/i> \u0438 <i>const char*<\/i>.<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 <i>Foo<\/i>. \u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <i>Foo<\/i> \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <i>%TypeHeaderCode<\/i>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 <i>%End<\/i>. \u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <i>%TypeHeaderCode<\/i> \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u043e\u0434, \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043b\u0430\u0441\u0441\u0430 C++, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432 \u044d\u0442\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u0430 <i>Foo<\/i> \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430 Python. \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043c\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 <i>Foo<\/i> \u0432 Python (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 Python \u043d\u0435\u0442 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u0438 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0445 \u0447\u043b\u0435\u043d\u043e\u0432). \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 <i>%DefaultEncoding<\/i>, \u0442\u043e \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0442\u0438\u043f\u0430 <i>const char*<\/i>, \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <i>Encoding<\/i> \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0438 Python \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c Python-\u043f\u0430\u043a\u0435\u0442 <i>pyfoocpp<\/i> \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e. \u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 wheel-\u043f\u0430\u043a\u0435\u0442, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <i>sip-build<\/i> \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 SIP, \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0432 \u043d\u0438\u0445 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <i>sip-build<\/i> \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0435 <i>pyfoo_cpp_01<\/i>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043f\u0430\u043f\u043a\u0430 <i>build<\/i> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre> build \u2514\u2500\u2500 foocpp     \u251c\u2500\u2500 apiversions.c     \u251c\u2500\u2500 array.c     \u251c\u2500\u2500 array.h     \u251c\u2500\u2500 bool.cpp     \u251c\u2500\u2500 build     \u2502\u00a0\u00a0 \u2514\u2500\u2500 temp.linux-x86_64-3.8     \u2502\u00a0\u00a0     \u251c\u2500\u2500 apiversions.o     \u2502\u00a0\u00a0     \u251c\u2500\u2500 array.o     \u2502\u00a0\u00a0     \u251c\u2500\u2500 bool.o     \u2502\u00a0\u00a0     \u251c\u2500\u2500 descriptors.o     \u2502\u00a0\u00a0     \u251c\u2500\u2500 int_convertors.o     \u2502\u00a0\u00a0     \u251c\u2500\u2500 objmap.o     \u2502\u00a0\u00a0     \u251c\u2500\u2500 qtlib.o     \u2502\u00a0\u00a0     \u251c\u2500\u2500 sipfoocppcmodule.o     \u2502\u00a0\u00a0     \u251c\u2500\u2500 sipfoocppFoo.o     \u2502\u00a0\u00a0     \u251c\u2500\u2500 siplib.o     \u2502\u00a0\u00a0     \u251c\u2500\u2500 threads.o     \u2502\u00a0\u00a0     \u2514\u2500\u2500 voidptr.o     \u251c\u2500\u2500 descriptors.c     \u251c\u2500\u2500 foocpp.cpython-38-x86_64-linux-gnu.so     \u251c\u2500\u2500 int_convertors.c     \u251c\u2500\u2500 objmap.c     \u251c\u2500\u2500 qtlib.c     \u251c\u2500\u2500 sipAPIfoocpp.h     \u251c\u2500\u2500 sipfoocppcmodule.cpp     \u251c\u2500\u2500 sipfoocppFoo.cpp     \u251c\u2500\u2500 sip.h     \u251c\u2500\u2500 sipint.h     \u251c\u2500\u2500 siplib.c     \u251c\u2500\u2500 threads.c     \u2514\u2500\u2500 voidptr.c <\/pre>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0444\u0430\u0439\u043b <i>sipfoocppFoo.cpp<\/i> (\u043c\u044b \u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435):<\/p>\n<pre><code class=\"cpp\">\/*  * Interface wrapper code.  *  * Generated by SIP 5.1.1  *\/  #include &quot;sipAPIfoocpp.h&quot;  #line 6 &quot;\/home\/jenyay\/temp\/2\/pyfoocpp.sip&quot;     #include &lt;foo.h&gt; #line 12 &quot;\/home\/jenyay\/temp\/2\/build\/foocpp\/sipfoocppFoo.cpp&quot;  PyDoc_STRVAR(doc_Foo_set_int_val, &quot;set_int_val(self, int)&quot;);  extern &quot;C&quot; {static PyObject *meth_Foo_set_int_val(PyObject *, PyObject *);} static PyObject *meth_Foo_set_int_val(PyObject *sipSelf, PyObject *sipArgs) {     PyObject *sipParseErr = SIP_NULLPTR;      {         int a0;          ::Foo *sipCpp;          if (sipParseArgs(&amp;sipParseErr, sipArgs, &quot;Bi&quot;, &amp;sipSelf, sipType_Foo, &amp;sipCpp, &amp;a0))         {             sipCpp-&gt;set_int_val(a0);              Py_INCREF(Py_None);             return Py_None;         }     }      \/* Raise an exception if the arguments couldn't be parsed. *\/     sipNoMethod(sipParseErr, sipName_Foo, sipName_set_int_val, doc_Foo_set_int_val);      return SIP_NULLPTR; }  PyDoc_STRVAR(doc_Foo_get_int_val, &quot;get_int_val(self) -&gt; int&quot;);  extern &quot;C&quot; {static PyObject *meth_Foo_get_int_val(PyObject *, PyObject *);} static PyObject *meth_Foo_get_int_val(PyObject *sipSelf, PyObject *sipArgs) {     PyObject *sipParseErr = SIP_NULLPTR;      {          ::Foo *sipCpp;          if (sipParseArgs(&amp;sipParseErr, sipArgs, &quot;B&quot;, &amp;sipSelf, sipType_Foo, &amp;sipCpp))         {             int sipRes;              sipRes = sipCpp-&gt;get_int_val();              return PyLong_FromLong(sipRes);         }     }      \/* Raise an exception if the arguments couldn't be parsed. *\/     sipNoMethod(sipParseErr, sipName_Foo, sipName_get_int_val, doc_Foo_get_int_val);      return SIP_NULLPTR; }  PyDoc_STRVAR(doc_Foo_set_string_val, &quot;set_string_val(self, str)&quot;);  extern &quot;C&quot; {static PyObject *meth_Foo_set_string_val(PyObject *, PyObject *);} static PyObject *meth_Foo_set_string_val(PyObject *sipSelf, PyObject *sipArgs) {     PyObject *sipParseErr = SIP_NULLPTR;      {         const char* a0;         PyObject *a0Keep;          ::Foo *sipCpp;          if (sipParseArgs(&amp;sipParseErr, sipArgs, &quot;BA8&quot;, &amp;sipSelf, sipType_Foo, &amp;sipCpp, &amp;a0Keep, &amp;a0))         {             sipCpp-&gt;set_string_val(a0);             Py_DECREF(a0Keep);              Py_INCREF(Py_None);             return Py_None;         }     }      \/* Raise an exception if the arguments couldn't be parsed. *\/     sipNoMethod(sipParseErr, sipName_Foo, sipName_set_string_val, doc_Foo_set_string_val);      return SIP_NULLPTR; }  PyDoc_STRVAR(doc_Foo_get_string_val, &quot;get_string_val(self) -&gt; str&quot;);  extern &quot;C&quot; {static PyObject *meth_Foo_get_string_val(PyObject *, PyObject *);} static PyObject *meth_Foo_get_string_val(PyObject *sipSelf, PyObject *sipArgs) {     PyObject *sipParseErr = SIP_NULLPTR;      {          ::Foo *sipCpp;          if (sipParseArgs(&amp;sipParseErr, sipArgs, &quot;B&quot;, &amp;sipSelf, sipType_Foo, &amp;sipCpp))         {             char*sipRes;              sipRes = sipCpp-&gt;get_string_val();              if (sipRes == SIP_NULLPTR)             {                 Py_INCREF(Py_None);                 return Py_None;             }              return PyUnicode_FromString(sipRes);         }     }      \/* Raise an exception if the arguments couldn't be parsed. *\/     sipNoMethod(sipParseErr, sipName_Foo, sipName_get_string_val, doc_Foo_get_string_val);      return SIP_NULLPTR; }  \/* Call the instance's destructor. *\/ extern &quot;C&quot; {static void release_Foo(void *, int);} static void release_Foo(void *sipCppV, int) {     delete reinterpret_cast&lt; ::Foo *&gt;(sipCppV); }  extern &quot;C&quot; {static void dealloc_Foo(sipSimpleWrapper *);} static void dealloc_Foo(sipSimpleWrapper *sipSelf) {     if (sipIsOwnedByPython(sipSelf))     {         release_Foo(sipGetAddress(sipSelf), 0);     } }  extern &quot;C&quot; {static void *init_type_Foo(sipSimpleWrapper *, PyObject *,                   PyObject *, PyObject **, PyObject **, PyObject **);} static void *init_type_Foo(sipSimpleWrapper *, PyObject *sipArgs, PyObject *sipKwds,                                    PyObject **sipUnused, PyObject **, PyObject **sipParseErr) {      ::Foo *sipCpp = SIP_NULLPTR;      {         int a0;         const char* a1;         PyObject *a1Keep;          if (sipParseKwdArgs(sipParseErr, sipArgs, sipKwds, SIP_NULLPTR, sipUnused, &quot;iA8&quot;, &amp;a0, &amp;a1Keep, &amp;a1))         {             sipCpp = new  ::Foo(a0,a1);             Py_DECREF(a1Keep);              return sipCpp;         }     }      {         const  ::Foo* a0;          if (sipParseKwdArgs(sipParseErr, sipArgs, sipKwds, SIP_NULLPTR, sipUnused, &quot;J9&quot;, sipType_Foo, &amp;a0))         {             sipCpp = new  ::Foo(*a0);              return sipCpp;         }     }      return SIP_NULLPTR; }  static PyMethodDef methods_Foo[] = {     {sipName_get_int_val, meth_Foo_get_int_val, METH_VARARGS, doc_Foo_get_int_val},     {sipName_get_string_val, meth_Foo_get_string_val, METH_VARARGS, doc_Foo_get_string_val},     {sipName_set_int_val, meth_Foo_set_int_val, METH_VARARGS, doc_Foo_set_int_val},     {sipName_set_string_val, meth_Foo_set_string_val, METH_VARARGS, doc_Foo_set_string_val} };  PyDoc_STRVAR(doc_Foo, &quot;\\1Foo(int, str)\\n&quot; &quot;Foo(Foo)&quot;);  sipClassTypeDef sipTypeDef_foocpp_Foo = {     {         -1,         SIP_NULLPTR,         SIP_NULLPTR,         SIP_TYPE_CLASS,         sipNameNr_Foo,         SIP_NULLPTR,         SIP_NULLPTR     },     {         sipNameNr_Foo,         {0, 0, 1},         4, methods_Foo,         0, SIP_NULLPTR,         0, SIP_NULLPTR,         {SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR,          SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR},     },     doc_Foo,     -1,     -1,     SIP_NULLPTR,     SIP_NULLPTR,     init_type_Foo,     SIP_NULLPTR,     SIP_NULLPTR,     SIP_NULLPTR,     SIP_NULLPTR,     dealloc_Foo,     SIP_NULLPTR,     SIP_NULLPTR,     SIP_NULLPTR,     release_Foo,     SIP_NULLPTR,     SIP_NULLPTR,     SIP_NULLPTR,     SIP_NULLPTR,     SIP_NULLPTR,     SIP_NULLPTR,     SIP_NULLPTR }; <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u043f\u0430\u043a\u0435\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <i>sip-wheel<\/i>. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0444\u0430\u0439\u043b <i>pyfoocpp-0.1-cp38-cp38-manylinux1_x86_64.whl<\/i> \u0438\u043b\u0438 \u0441 \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <i>pip install &#8212;user pyfoocpp-0.1-cp38-cp38-manylinux1_x86_64.whl<\/i> \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 Python \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438:<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; from foocpp import Foo &gt;&gt;&gt; x = Foo(10, 'Hello')  &gt;&gt;&gt; x.get_int_val() 10  &gt;&gt;&gt; x.get_string_val() 'Hello'  &gt;&gt;&gt; x.set_int_val(50) &gt;&gt;&gt; x.set_string_val('\u041f\u0440\u0438\u0432\u0435\u0442')  &gt;&gt;&gt; x.get_int_val() 50  &gt;&gt;&gt; x.get_string_val() '\u041f\u0440\u0438\u0432\u0435\u0442' <\/code><\/pre>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442! \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438 Python-\u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043e\u0431\u0432\u044f\u0437\u043a\u043e\u0439 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430 C++. \u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u043a\u0440\u0430\u0441\u043e\u0442\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430.<\/p>\n<h2> \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430<\/h2>\n<p>  \u041a\u043b\u0430\u0441\u0441\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SIP \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 C++. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0435 <i>Foo<\/i> \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0433\u0435\u0442\u0442\u0435\u0440\u0430 \u0438 \u0434\u0432\u0430 \u0441\u0435\u0442\u0442\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u043b\u0430\u0441\u0441 \u0441\u0442\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u00ab\u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u043c\u00bb. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0438\u043f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u043f\u0430\u043f\u043a\u0435 <i>pyfoo_cpp_02<\/i>. <\/p>\n<p>  \u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <i>pyfoocpp.sip<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">%Module(name=foocpp, language=&quot;C++&quot;) %DefaultEncoding &quot;UTF-8&quot;  class Foo {     %TypeHeaderCode     #include &lt;foo.h&gt;     %End      public:         Foo(int, const char*);          void set_int_val(int);         int get_int_val();         %Property(name=int_val, get=get_int_val, set=set_int_val)          void set_string_val(const char*);         char* get_string_val();         %Property(name=string_val, get=get_string_val, set=set_string_val) }; <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#property\" rel=\"nofollow\">%Property<\/a>, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: <i>name<\/i> \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 <i>get<\/i> \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0435-\u043b\u0438\u0431\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0433\u0435\u0442\u0442\u0435\u0440). \u0421\u0435\u0442\u0442\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c, \u043d\u043e \u0435\u0441\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u043c\u0435\u0442\u043e\u0434-\u0441\u0435\u0442\u0442\u0435\u0440 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <i>set<\/i>. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u044f\u043c\u043e\u043b\u0438\u043d\u0435\u0439\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u043a\u0430\u043a \u0433\u0435\u0442\u0442\u0435\u0440\u044b \u0438 \u0441\u0435\u0442\u0442\u0435\u0440\u044b.<\/p>\n<p>  \u041d\u0430\u043c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0448\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <i>sip-wheel<\/i>, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 python:<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; from foocpp import Foo &gt;&gt;&gt; x = Foo(10, &quot;Hello&quot;) &gt;&gt;&gt; x.int_val 10  &gt;&gt;&gt; x.string_val 'Hello'  &gt;&gt;&gt; x.int_val = 50 &gt;&gt;&gt; x.string_val = '\u041f\u0440\u0438\u0432\u0435\u0442'  &gt;&gt;&gt; x.get_int_val() 50  &gt;&gt;&gt; x.get_string_val() '\u041f\u0440\u0438\u0432\u0435\u0442' <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <i>Foo<\/i>, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>int_val<\/i> \u0438 <i>string_val<\/i> \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u0438 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c.<\/p>\n<h2> \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/h2>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0443\u043b\u0443\u0447\u0448\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 <i>Foo<\/i>. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 \u043f\u0430\u043f\u043a\u0435 <i>pyfoo_cpp_03<\/i> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043a\u043b\u0430\u0441\u0441\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (docstring). \u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e, \u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u043c \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u0430 <i>pyfoocpp.sip<\/i>. \u0412\u043e\u0442 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435:<\/p>\n<pre><code class=\"cpp\">%Module(name=foocpp, language=&quot;C++&quot;) %DefaultEncoding &quot;UTF-8&quot;  class Foo { %Docstring Class example from C++ library %End      %TypeHeaderCode     #include &lt;foo.h&gt;     %End      public:         Foo(int, const char*);          void set_int_val(int);         %Docstring(format=&quot;deindented&quot;, signature=&quot;prepended&quot;)             Set integer value         %End          int get_int_val();         %Docstring(format=&quot;deindented&quot;, signature=&quot;prepended&quot;)             Return integer value         %End          %Property(name=int_val, get=get_int_val, set=set_int_val)         {             %Docstring &quot;deindented&quot;                 The property for integer value             %End         };          void set_string_val(const char*);         %Docstring(format=&quot;deindented&quot;, signature=&quot;appended&quot;)             Set string value         %End          char* get_string_val();         %Docstring(format=&quot;deindented&quot;, signature=&quot;appended&quot;)             Return string value         %End          %Property(name=string_val, get=get_string_val, set=set_string_val)         {             %Docstring &quot;deindented&quot;                 The property for string value             %End         }; }; <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u044b \u0443\u0436\u0435 \u043f\u043e\u043d\u044f\u043b\u0438, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#docstring\" rel=\"nofollow\">%Docstring<\/a>. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b. \u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043a\u0435\u0442 <i>pyfoocpp<\/i> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <i>sip-wheel<\/i>, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0435\u0433\u043e \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u044d\u0442\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043d\u0430 \u0447\u0442\u043e \u0432\u043b\u0438\u044f\u0435\u0442, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 Python. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0447\u043b\u0435\u043d\u044b <i>__doc__<\/i> \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043a\u043b\u0430\u0441\u0441\u0443 <i>Foo<\/i>. \u041a\u0430\u043a \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435, \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430\u043c\u0438 <i>%Docstring<\/i> \u0438 <i>%End<\/i>. \u0412 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 5-7 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%Docstring<\/i>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u043a\u043b\u0430\u0441\u0441 <i>Foo<\/i> \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 5-7 \u043d\u0435\u0442 \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432, \u0438\u043d\u0430\u0447\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0442\u043e\u0436\u0435 \u043f\u043e\u043f\u0430\u043b\u0438 \u0431\u044b \u0432 Foo.__doc__. \u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441 <i>Foo<\/i> \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0432\u0432\u0435\u043b\u0438:<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; from foocpp import Foo &gt;&gt;&gt; Foo.__doc__ 'Class example from C++ library' <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <i>%Docstring<\/i>, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u043d\u0430 17-19 \u0441\u0442\u0440\u043e\u043a\u0430\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>format<\/i> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \u00abraw\u00bb \u0438\u043b\u0438 \u00abdeindented\u00bb. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u043a\u0430\u043a \u043e\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2014 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432 (\u043d\u043e \u043d\u0435 \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u0438). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f, \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>format<\/i> \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#std:directive-%DefaultDocstringFormat\" rel=\"nofollow\">%DefaultDocstringFormat<\/a> (\u043c\u044b \u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435), \u0430 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430, \u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e <i>format=\u00abraw\u00bb<\/i>.<\/p>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, SIP \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0435\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b (\u043a\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u0436\u0438\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0438 \u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442). \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>signature<\/i> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0443\u0434\u0430 \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443: \u0434\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (<i>signature=\u00abprepended\u00bb<\/i>), \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0435 (<i>signature=\u00abappended\u00bb<\/i>) \u0438\u043b\u0438 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 (<i>signature=\u00abdiscarded\u00bb<\/i>). <\/p>\n<p>  \u041d\u0430\u0448 \u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>signature=\u00abprepended\u00bb<\/i> \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <i>get_int_val<\/i> \u0438 <i>set_int_val<\/i>, \u0430 \u0442\u0430\u043a\u0436\u0435 <i>signature=\u00abappended\u00bb<\/i> \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <i>get_string_val<\/i> \u0438 <i>set_string_val<\/i>. \u0422\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>format=\u00abdeindented\u00bb<\/i> \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 Python:<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; Foo.get_int_val.__doc__ 'get_int_val(self) -&gt; int\\nReturn integer value'  &gt;&gt;&gt; Foo.set_int_val.__doc__ 'set_int_val(self, int)\\nSet integer value'  &gt;&gt;&gt; Foo.get_string_val.__doc__ 'Return string value\\nget_string_val(self) -&gt; str'  &gt;&gt;&gt; Foo.set_string_val.__doc__ 'Set string value\\nset_string_val(self, str)' <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <i>signature<\/i> \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%Docstring<\/i> \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%Docstring<\/i>&#8230;<i>%End<\/i> \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b %Property. \u0422\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#property\" rel=\"nofollow\">%Property<\/a>. <\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043a\u0430\u043a \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%Docstring<\/i>. \u0422\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>format<\/i>). \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432. <\/p>\n<p>  \u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430:<\/p>\n<pre><code class=\"plaintext\">&gt;&gt;&gt; Foo.int_val.__doc__ 'The property for integer value'  &gt;&gt;&gt; Foo.string_val.__doc__ 'The property for string value'  &gt;&gt;&gt; help(Foo) Help on class Foo in module foocpp:  class Foo(sip.wrapper)  |  Class example from C++ library  |    |  Method resolution order:  |      Foo  |      sip.wrapper  |      sip.simplewrapper  |      builtins.object  |    |  Methods defined here:  |    |  get_int_val(...)  |      get_int_val(self) -&gt; int  |      Return integer value  |    |  get_string_val(...)  |      Return string value  |      get_string_val(self) -&gt; str  |    |  set_int_val(...)  |      set_int_val(self, int)  |      Set integer value  |    |  set_string_val(...)  |      Set string value  |      set_string_val(self, str) ... <\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <i>format<\/i> \u0438 <i>signature<\/i> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#defaultdocstringformat\" rel=\"nofollow\">%DefaultDocstringFormat<\/a> \u0438 <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#defaultdocstringsignature\" rel=\"nofollow\">%DefaultDocstringSignature<\/a>. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 <i>pyfoo_cpp_04<\/i>. \u0424\u0430\u0439\u043b <i>pyfoocpp.sip<\/i> \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">%Module(name=foocpp, language=&quot;C++&quot;) %DefaultEncoding &quot;UTF-8&quot; %DefaultDocstringFormat &quot;deindented&quot; %DefaultDocstringSignature &quot;prepended&quot;  class Foo {     %Docstring     Class example from C++ library     %End      %TypeHeaderCode     #include &lt;foo.h&gt;     %End      public:         Foo(int, const char*);          void set_int_val(int);         %Docstring             Set integer value         %End          int get_int_val();         %Docstring             Return integer value         %End          %Property(name=int_val, get=get_int_val, set=set_int_val)         {             %Docstring                 The property for integer value             %End         };          void set_string_val(const char*);         %Docstring             Set string value         %End          char* get_string_val();         %Docstring             Return string value         %End          %Property(name=string_val, get=get_string_val, set=set_string_val)         {             %Docstring                 The property for string value             %End         }; }; <\/code><\/pre>\n<p>  \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 <i>%DefaultDocstringFormat \u00abdeindented\u00bb<\/i> \u0438 <i>%DefaultDocstringSignature \u00abprepended\u00bb<\/i>, \u0430 \u0434\u0430\u043b\u0435\u0435 \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%Docstring<\/i> \u0431\u044b\u043b\u0438 \u0443\u0431\u0440\u0430\u043d\u044b.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <i>Foo<\/i>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <i>help(Foo)<\/i>:<\/p>\n<pre><code class=\"plaintext\">&gt;&gt;&gt; from foocpp import Foo &gt;&gt;&gt; help(Foo)  class Foo(sip.wrapper)  |  Class example from C++ library  |    |  Method resolution order:  |      Foo  |      sip.wrapper  |      sip.simplewrapper  |      builtins.object  |    |  Methods defined here:  |    |  get_int_val(...)  |      get_int_val(self) -&gt; int  |      Return integer value  |    |  get_string_val(...)  |      get_string_val(self) -&gt; str  |      Return string value  |    |  set_int_val(...)  |      set_int_val(self, int)  |      Set integer value  |    |  set_string_val(...)  |      set_string_val(self, str)  |      Set string value ... <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0438 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u043e.<\/p>\n<h2> \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u044b<\/h2>\n<p>  \u041a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043e\u0431\u0432\u044f\u0437\u043a\u043e\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0442\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C\/C++. \u0412\u044b\u0448\u0435 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043a\u043b\u0430\u0441\u0441\u044b, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u0435\u043d, \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0438\u043c\u0435\u043d \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043a\u0430\u043a\u0438\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u043e\u043c \u044f\u0437\u044b\u043a\u0430 Python. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <i>PyName<\/i>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439 <i>PyName<\/i> \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 <i>pyfoo_cpp_05<\/i>. \u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 <i>pyfoo_cpp_04<\/i> \u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u043c <i>pyfoocpp.sip<\/i>, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">%Module(name=foocpp, language=&quot;C++&quot;) %DefaultEncoding &quot;UTF-8&quot; %DefaultDocstringFormat &quot;deindented&quot; %DefaultDocstringSignature &quot;prepended&quot;  class Foo \/PyName=Bar\/ {     %Docstring     Class example from C++ library     %End      %TypeHeaderCode     #include &lt;foo.h&gt;     %End      public:         Foo(int, const char*);          void set_int_val(int) \/PyName=set_integer_value\/;         %Docstring             Set integer value         %End          int get_int_val() \/PyName=get_integer_value\/;         %Docstring             Return integer value         %End          %Property(name=int_val, get=get_integer_value, set=set_integer_value)         {             %Docstring                 The property for integer value             %End         };          void set_string_val(const char*) \/PyName=set_string_value\/;         %Docstring             Set string value         %End          char* get_string_val() \/PyName=get_string_value\/;         %Docstring             Return string value         %End          %Property(name=string_val, get=get_string_value, set=set_string_value)         {             %Docstring                 The property for string value             %End         }; }; <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b\u0438 \u043a\u043b\u0430\u0441\u0441 <i>Foo<\/i> \u0432 \u043a\u043b\u0430\u0441\u0441 <i>Bar<\/i>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043c\u0435\u043d\u0430 \u0432\u0441\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <i>PyName<\/i>. \u0414\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u043d\u0430 \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432. \u0412 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 <i>%Property<\/i> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <i>get<\/i> \u0438 <i>set<\/i> \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u0430\u043a \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 Python-\u043a\u043b\u0430\u0441\u0441\u0435, \u0430 \u043d\u0435 \u0442\u0435 \u0438\u043c\u0435\u043d\u0430, \u043a\u0430\u043a \u043e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043a \u043a\u043e\u0434\u0435 \u043d\u0430 C++.<\/p>\n<p>  \u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0435\u0433\u043e \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432 \u044f\u0437\u044b\u043a\u0435 Python:<\/p>\n<pre><code class=\"plaintext\">&gt;&gt;&gt; from foocpp import Bar &gt;&gt;&gt; help(Bar)  Help on class Bar in module foocpp:  class Bar(sip.wrapper)  |  Class example from C++ library  |    |  Method resolution order:  |      Bar  |      sip.wrapper  |      sip.simplewrapper  |      builtins.object  |    |  Methods defined here:  |    |  get_integer_value(...)  |      get_integer_value(self) -&gt; int  |      Return integer value  |    |  get_string_value(...)  |      get_string_value(self) -&gt; str  |      Return string value  |    |  set_integer_value(...)  |      set_integer_value(self, int)  |      Set integer value  |    |  set_string_value(...)  |      set_string_value(self, str)  |      Set string value  |    |  ----------------------------------------------------------------------  |  Data descriptors defined here:  |    |  __weakref__  |      list of weak references to the object (if defined)  |    |  int_val  |      The property for integer value  |    |  string_val  |      The property for string value  |    |  ---------------------------------------------------------------------- ... <\/code><\/pre>\n<p>  \u0421\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e! \u041d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u043a\u043b\u0430\u0441\u0441 \u0438 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u044b.<\/p>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u0430 \u0432\u0441\u0435\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0431\u0443\u043a\u0432\u044b \u00abQ\u00bb \u0432 Qt \u0438\u043b\u0438 \u00abwx\u00bb \u0432 wxWidgets. \u0415\u0441\u043b\u0438 \u0432 \u0441\u0432\u043e\u0435\u0439 Python-\u043e\u0431\u0432\u044f\u0437\u043a\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u044b, \u0438\u0437\u0431\u0430\u0432\u0438\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432, \u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <i>PyName<\/i> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#autopyname\" rel=\"nofollow\">%AutoPyName<\/a>. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0441\u043a\u0430\u0436\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <i>%AutoPyName<\/i> \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#module\" rel=\"nofollow\">%Module<\/a> \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"plaintext\">%Module PyQt5.QtCore {     %AutoPyName(remove_leading=&quot;Q&quot;) } <\/code><\/pre>\n<h2> \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432<\/h2>\n<h3> \u041f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0430 std::wstring<\/h3>\n<p>  \u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043a\u043b\u0430\u0441\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 <i>int<\/i> \u0438 <i>char*<\/i>. \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 SIP \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0432 \u043a\u043b\u0430\u0441\u0441\u044b Python \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 \u043f\u0430\u043f\u043a\u0435 <i>pyfoo_cpp_06<\/i>, \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 STL. \u0427\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u0438 \u043d\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u0432 Unicode \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043b\u0430\u0441\u0441 \u0441\u0442\u0440\u043e\u043a <i>std::wstring<\/i>. \u0418\u0434\u0435\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 C++ \u0432 \u043a\u043b\u0430\u0441\u0441\u044b Python \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <i>Foo<\/i> \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <i>foo<\/i>. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0444\u0430\u0439\u043b <i>foo.h<\/i>):<\/p>\n<pre><code class=\"cpp\">#ifndef FOO_LIB #define FOO_LIB  #include &lt;string&gt;  using std::wstring;  class Foo {     private:         int _int_val;         wstring _string_val;     public:         Foo(int int_val, wstring string_val);          void set_int_val(int val);         int get_int_val();          void set_string_val(wstring val);         wstring get_string_val(); };  #endif <\/code><\/pre>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <i>Foo<\/i> \u0432 \u0444\u0430\u0439\u043b\u0435 <i>foo.cpp<\/i>:<\/p>\n<pre><code class=\"cpp\">#include &lt;string&gt;  #include &quot;foo.h&quot;  using std::wstring;  Foo::Foo(int int_val, wstring string_val):     _int_val(int_val), _string_val(string_val) {}  void Foo::set_int_val(int val) {     _int_val = val; }  int Foo::get_int_val() {     return _int_val; }  void Foo::set_string_val(wstring val) {     _string_val = val; }  wstring Foo::get_string_val() {     return _string_val; } <\/code><\/pre>\n<p>  \u0418 \u0444\u0430\u0439\u043b <i>main.cpp<\/i> \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">#include &lt;iostream&gt;  #include &quot;foo.h&quot;  using std::cout; using std::endl;  int main(int argc, char* argv[]) {     auto foo = Foo(10, L&quot;Hello&quot;);     cout &lt;&lt; L&quot;int_val: &quot; &lt;&lt; foo.get_int_val() &lt;&lt; endl;     cout &lt;&lt; L&quot;string_val: &quot; &lt;&lt; foo.get_string_val().c_str() &lt;&lt; endl;      foo.set_int_val(0);     foo.set_string_val(L&quot;Hello world!&quot;);      cout &lt;&lt; L&quot;int_val: &quot; &lt;&lt; foo.get_int_val() &lt;&lt; endl;     cout &lt;&lt; L&quot;string_val: &quot; &lt;&lt; foo.get_string_val().c_str() &lt;&lt; endl; } <\/code><\/pre>\n<p>  \u0424\u0430\u0439\u043b\u044b <i>foo.h<\/i>, <i>foo.cpp<\/i> \u0438 <i>main.cpp<\/i>, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 <i>foo<\/i>. <i>Makefile<\/i> \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 <i>pyproject.toml<\/i> \u0438 <i>project.py<\/i>.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0444\u0430\u0439\u043b <i>pyfoocpp.sip<\/i> \u0441\u0442\u0430\u043b \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">%Module(name=foocpp, language=&quot;C++&quot;) %DefaultEncoding &quot;UTF-8&quot;  class Foo {     %TypeHeaderCode     #include &lt;foo.h&gt;     %End      public:         Foo(int, std::wstring);          void set_int_val(int);         int get_int_val();         %Property(name=int_val, get=get_int_val, set=set_int_val)          void set_string_val(std::wstring);         std::wstring get_string_val();         %Property(name=string_val, get=get_string_val, set=set_string_val) };  %MappedType std::wstring { %TypeHeaderCode #include &lt;string&gt; %End  %ConvertFromTypeCode     \/\/ Convert an std::wstring to a Python (Unicode) string     PyObject* newstring;     newstring = PyUnicode_FromWideChar(sipCpp-&gt;data(), -1);     return newstring; %End  %ConvertToTypeCode     \/\/ Convert a Python (Unicode) string to an std::wstring     if (sipIsErr == NULL) {         return PyUnicode_Check(sipPy);     }     if (PyUnicode_Check(sipPy)) {         *sipCppPtr = new std::wstring(PyUnicode_AS_UNICODE(sipPy));         return 1;     }     return 0; %End }; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0444\u0430\u0439\u043b <i>pyfoocpp.sip<\/i> \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <i>pyfoocpp.sip<\/i> \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <i>Foo<\/i> \u0431\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%MappedType<\/i>, \u0442\u043e \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0431\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<pre><code class=\"plaintext\">$ sip-wheel  These bindings will be built: pyfoocpp. Generating the pyfoocpp bindings... sip-wheel: std::wstring is undefined <\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c, \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 <i>std::wstring<\/i> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e Python-\u043e\u0431\u044a\u0435\u043a\u0442, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435. \u0414\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0438\u0437\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/docs.python.org\/3\/c-api\/index.html\" rel=\"nofollow\">Python\/C API<\/a>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 Python\/C API \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0442\u0435\u043c\u0430, \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u0430\u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0430 \u043a\u043d\u0438\u0433\u0438, \u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u044f\u0441\u044c \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0438\u0437 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 C++ \u0432 Python \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#mappedtype\" rel=\"nofollow\">%MappedType<\/a>, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0442\u0440\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b: <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#std:directive-%TypeHeaderCode\" rel=\"nofollow\">%TypeHeaderCode<\/a>, <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#std:directive-%ConvertToTypeCode\" rel=\"nofollow\">%ConvertToTypeCode<\/a> \u0438 <a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/directives.html#std:directive-%ConvertFromTypeCode\" rel=\"nofollow\">%ConvertFromTypeCode<\/a>. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>%MappedType<\/i> \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u044b. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>%MappedType std::wstring<\/i>.<\/p>\n<p>  \u0421 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 <i>%TypeHeaderCode<\/i> \u043c\u044b \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438\u0441\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <a href=\"#cpp\">\u0414\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0432\u044f\u0437\u043a\u0443 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C++<\/a>. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u044d\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u0438\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%TypeHeaderCode<\/i> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <i>string<\/i>, \u0433\u0434\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043a\u043b\u0430\u0441\u0441 <i>std::string<\/i>.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<h3> %ConvertFromTypeCode. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 C++ \u0432 Python<\/h3>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <i>std::wstring<\/i> \u0432 \u043a\u043b\u0430\u0441\u0441 <i>str<\/i> \u044f\u0437\u044b\u043a\u0430 Python. \u0414\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">%ConvertFromTypeCode     \/\/ Convert an std::wstring to a Python (Unicode) string     PyObject* newstring;     newstring = PyUnicode_FromWideChar(sipCpp-&gt;data(), -1);     return newstring; %End <\/code><\/pre>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>sipCpp<\/i> \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u043a\u043e\u0434\u0430 \u043d\u0430 C++, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c Python-\u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>return<\/i>. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>sipCpp<\/i> \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f <i>std::wstring*<\/i>. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <i>str<\/i>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"https:\/\/docs.python.org\/3\/c-api\/unicode.html#c.PyUnicode_FromWideChar\" rel=\"nofollow\">PyUnicode_FromWideChar<\/a> \u0438\u0437 Python\/C API. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c) \u0442\u0438\u043f\u0430 <i>const wchar_t *w<\/i>, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0415\u0441\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 -1, \u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>PyUnicode_FromWideChar<\/i> \u0441\u0430\u043c\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"http:\/\/www.cplusplus.com\/reference\/cwchar\/wcslen\/\" rel=\"nofollow\">wcslen<\/a>. <\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 <i>wchar_t*<\/i> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <a href=\"http:\/\/www.cplusplus.com\/reference\/string\/basic_string\/data\/\" rel=\"nofollow\">data<\/a> \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"http:\/\/www.cplusplus.com\/reference\/string\/wstring\/\" rel=\"nofollow\">std::wstring<\/a>.<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <i>PyUnicode_FromWideChar<\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 <a href=\"https:\/\/docs.python.org\/3\/c-api\/structures.html#c.PyObject\" rel=\"nofollow\">PyObject<\/a> \u0438\u043b\u0438 <i>NULL<\/i> \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. <i>PyObject<\/i> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043b\u044e\u0431\u043e\u0439 Python-\u043e\u0431\u044a\u0435\u043a\u0442, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 <i>str<\/i>. \u0412 Python\/C API \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u044b\u0447\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 <i>PyObject*<\/i>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%ConvertFromTypeCode<\/i> \u043c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <i>PyObject*<\/i>.<\/p>\n<h3> %ConvertToTypeCode. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 Python \u0432 C++<\/h3>\n<p>  \u041e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 Python (\u043f\u043e \u0441\u0443\u0442\u0438 \u0438\u0437 <i>PyObject*<\/i>) \u0432 \u043a\u043b\u0430\u0441\u0441 <i>std::wstring<\/i> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 <i>%ConvertToTypeCode<\/i>. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <i>pyfoo_cpp_06<\/i> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">%ConvertToTypeCode     \/\/ Convert a Python (Unicode) string to an std::wstring     if (sipIsErr == NULL) {         return PyUnicode_Check(sipPy);     }     if (PyUnicode_Check(sipPy)) {         *sipCppPtr = new std::wstring(PyUnicode_AS_UNICODE(sipPy));         return 1;     }     return 0; %End <\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%ConvertToTypeCode<\/i> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0446\u0435\u043b\u044f\u043c\u0438. \u0412\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%ConvertToTypeCode<\/i> SIP \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c (\u0438\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. <\/p>\n<p>  \u041e\u0434\u043d\u0430 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <i>PyObject *sipPy<\/i> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 Python-\u043e\u0431\u044a\u0435\u043a\u0442, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 <i>std::wstring<\/i>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u2014 <i>sipCppPtr<\/i> \u2014 \u044d\u0442\u043e \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0442.\u0435. \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0442\u0438\u043f <i>std::wstring**<\/i>.<\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u0430\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%ConvertToTypeCode<\/i> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u2014 <i>int *sipIsErr<\/i>. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0432\u043d\u043e <i>NULL<\/i>, \u0437\u043d\u0430\u0447\u0438\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <i>%ConvertToTypeCode<\/i> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0446\u0435\u043b\u044c\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043e\u043d\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435. \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u043e \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c 0. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0440\u0430\u0432\u0435\u043d <i>NULL<\/i>, \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e (\u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u043d\u0430 <i>int*<\/i>).<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e <i>sipPy<\/i> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u044e\u043d\u0438\u043a\u043e\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043a\u043b\u0430\u0441\u0441 <i>str<\/i>) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 <a href=\"https:\/\/docs.python.org\/3\/c-api\/unicode.html#c.PyUnicode_Check\" rel=\"nofollow\">PyUnicode_Check<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0442\u0438\u043f\u0430 <i>PyObject*<\/i>, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u044e\u043d\u0438\u043a\u043e\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u043b\u0438 \u043a\u043b\u0430\u0441\u0441, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439 \u043e\u0442 \u043d\u0435\u0435.<\/p>\n<p>  \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 C++ \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0440\u043e\u043a\u0438 <i>*sipCppPtr = new std::wstring(PyUnicode_AS_UNICODE(sipPy));<\/i>. \u0417\u0434\u0435\u0441\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 <a href=\"https:\/\/docs.python.org\/3\/c-api\/unicode.html#c.PyUnicode_AS_UNICODE\" rel=\"nofollow\">PyUnicode_AS_UNICODE<\/a> \u0438\u0437 Python\/C API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0438\u043f\u0430 <i>Py_UNICODE*<\/i>, \u0447\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e <i>wchar_t*<\/i>. \u042d\u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 <i>std::wstring<\/i>. \u041a\u0430\u043a \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>sipCppPtr<\/i>.<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <i>PyUnicode_AS_UNICODE<\/i> \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0439 \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043d\u043e \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <i>%ConvertToTypeCode<\/i> \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 1), \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c 0.<\/p>\n<h3> \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <\/h3>\n<p>  \u041c\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>std::wstring<\/i> \u0432 <i>str<\/i> \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0431\u0432\u044f\u0437\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u0430\u043a \u043d\u0430\u0434\u043e. \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <i>sip-wheel<\/i>, \u0437\u0430\u0442\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e pip \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 Python:<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; from foocpp import Foo &gt;&gt;&gt; x = Foo(10, 'Hello')  &gt;&gt;&gt; x.string_val 'Hello'  &gt;&gt;&gt; x.string_val = '\u041f\u0440\u0438\u0432\u0435\u0442' &gt;&gt;&gt; x.string_val '\u041f\u0440\u0438\u0432\u0435\u0442'  &gt;&gt;&gt; x.get_string_val() '\u041f\u0440\u0438\u0432\u0435\u0442' <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0441 \u0440\u0443\u0441\u0441\u043a\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u0442, \u0442.\u0435. \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<h2> \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f SIP \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Python-\u043e\u0431\u0432\u044f\u0437\u043e\u043a \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 C \u0438 C++. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 (\u0432 <a href=\"https:\/\/habr.com\/ru\/post\/495480\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a>) \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SIP. \u0412 \u0444\u0430\u0439\u043b\u0435 <i>pyproject.toml<\/i> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u043a\u0435\u0442\u0435 (\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438, \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f \u0438 \u043f\u0443\u0442\u0438 \u0434\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432). \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0430\u0439\u043b\u0430 <i>project.py<\/i> \u043c\u043e\u0436\u043d\u043e \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 Python, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 C\/C++-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u043b\u0438 \u0434\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>  \u0412 \u0444\u0430\u0439\u043b\u0435 <i>*.sip<\/i> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Python-\u043c\u043e\u0434\u0443\u043b\u044f \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u043e\u0434\u0443\u043b\u0435. \u0414\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <i>*.sip<\/i> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 Python \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u0432 C++. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043b\u0430\u0441\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%Property<\/i>, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <i>\/PyName\/<\/i>, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%Docstring<\/i>.<\/p>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0432\u0440\u043e\u0434\u0435 <i>int<\/i>, <i>char<\/i>, <i>char*<\/i> \u0438 \u0442.\u043f. SIP \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b Python, \u043d\u043e \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0442\u043e \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>%MappedType<\/i>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Python\/C API. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 Python \u0432 C++ \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 <i>%ConvertToTypeCode<\/i>. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0442\u0438\u043f\u0430 C++ \u0432 \u043a\u043b\u0430\u0441\u0441 Python \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 <i>%ConvertFromTypeCode<\/i>.<\/p>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0432\u0440\u043e\u0434\u0435 <i>%DefaultEncoding<\/i>, <i>%DefaultDocstringFormat<\/i> \u0438 <i>%DefaultDocstringSignature<\/i> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u044f\u0432\u043d\u043e.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0448\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438 \u0441\u0430\u043c\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438, \u043d\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043e\u0431\u043e\u0448\u043b\u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GIL, \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 Python-\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u0434\u043b\u044f \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u043c\u0443\u0441\u043e\u0440\u0430, \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043e\u0431\u0432\u044f\u0437\u043e\u043a \u0441\u043b\u043e\u0436\u043d\u044b\u0445 C\/C++-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043e\u0431\u043e\u0448\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0448\u0438\u0441\u044c \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043f\u043e\u0434 Linux \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 gcc\/g++. <\/p>\n<h2> \u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/495480\/\">\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Jenyay\/sip-examples\" rel=\"nofollow\">\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a><\/li>\n<li><a href=\"https:\/\/www.riverbankcomputing.com\/software\/sip\/intro\" rel=\"nofollow\">\u0414\u043e\u043c\u0430\u0448\u043d\u044f\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 SIP<\/a><\/li>\n<li><a href=\"https:\/\/www.riverbankcomputing.com\/static\/Docs\/sip\/\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0434\u043b\u044f SIP<\/a><\/li>\n<li><a href=\"https:\/\/docs.python.org\/3\/c-api\/index.html\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0434\u043b\u044f Python\/C API<\/a><\/li>\n<\/ul>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/495636\/\"> https:\/\/habr.com\/ru\/post\/495636\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/495636\/\">\u0412 <a href=\"https:\/\/habr.com\/ru\/post\/495480\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 SIP, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Python-\u043e\u0431\u0432\u044f\u0437\u043e\u043a (Python bindings) \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u044f\u0437\u044b\u043a\u0430\u0445 C \u0438 C++. \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SIP \u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438. \u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043e\u0431\u0432\u044f\u0437\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0432\u044f\u0437\u043a\u0443 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C++, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043b\u0430\u0441\u0441\u044b. \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u0434\u043b\u044f \u043d\u0430\u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430\u043c\u0438 \u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-301278","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/301278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=301278"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/301278\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=301278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=301278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=301278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}