SWIG生成的Python函数注释不起作用

问题描述 投票:0回答:1

我最近开始使用swig包装我的一个C ++库。我想在Python中使用此代码,到目前为止效果很好。问题在于Python不知道包装函数返回哪些对象。当然,我仍然可以在返回的对象上调用方法,因为我知道它的类型,但是我不能以这种方式使用智能感知。该python代码旨在供其他人使用,如果一个人不知道返回类型,此问题会使编码变得更加困难。

这是这些方法之一:

def CreateJoinRequestMessage(self) -> "Hive::SC_Message":
    return _Hive.SC_MessageHandler_CreateJoinRequestMessage(self)

它返回一个SC_Message对象。 SC_Message类也在SWIG生成的python代码中定义,如下所示:

    class SC_Message(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, messageString: "std::string const &", messageType: "Hive::SC_MessageType const &"):
        _Hive.SC_Message_swiginit(self, _Hive.new_SC_Message(messageString, messageType))

    def GetContent(self) -> "std::string":
        return _Hive.SC_Message_GetContent(self)

    def GetMessageType(self) -> "Hive::SC_MessageType":
        return _Hive.SC_Message_GetMessageType(self)
    __swig_destroy__ = _Hive.delete_SC_Message
    _Hive.SC_Message_swigregister(SC_Message)

所以使用智能感知时,我应该真正能够看到GetContent()方法。当我将生成的Python代码中的函数注释更改为“ SC_Message”时,一切正常。是SWIG的这种预期行为,还是SWIG还能产生更多有用的注释?没有-py3选项,将没有注释。

我的SWIG命令如下:

swig -c++ -python -py3 hive.i

这是我的SWIG文件:

 %module Hive
    %{
    #define SWIG_FILE_WITH_INIT
    #include "include/hive/PieceType.hpp"
    #include "include/hive/MoveType.hpp"
    #include "include/hive/AxialPosition.hpp"
    #include "include/hive/Color.hpp"
    #include "include/hive/neighbourMap.hpp"
    #include "include/hive/Piece.hpp"
    #include "include/hive/Player.hpp"
    #include "include/hive/PieceStack.hpp"
    #include "include/hive/globals.hpp"
    #include "include/hive/Move.hpp"
    #include "include/hive/board.hpp"
    #include "include/hive/gameState.hpp"
    #include "include/communication/SC_MessageType.hpp"
    #include "include/communication/SC_Message.hpp"
    #include "include/communication/SC_MessageHandler.hpp"
    #include "include/hive/benchmark/benchmark.hpp"
    %}
%include "std_string.i"
%include "std_array.i"
%include "std_pair.i"
%include "std_vector.i"
%include "include/hive/PieceType.hpp"
%include "include/hive/MoveType.hpp"
%include "include/hive/AxialPosition.hpp"
%include "include/hive/Color.hpp"
%include "include/hive/neighbourMap.hpp"
%include "include/hive/Piece.hpp"
%include "include/hive/Player.hpp"
%include "include/hive/PieceStack.hpp"
%include "include/hive/globals.hpp"
%include "include/hive/Move.hpp"
%include "include/hive/board.hpp"
%include "include/hive/gameState.hpp"
%include "include/communication/SC_MessageType.hpp"
%include "include/communication/SC_Message.hpp"
%include "include/communication/SC_MessageHandler.hpp"
%include "include/hive/benchmark/benchmark.hpp"

提前感谢。

python wrapper swig
1个回答
0
投票

似乎SWIG通常会生成具有c和c ++类型的注释。据我所知,这将在2.0版中解决。有关更多信息,请单击此处https://github.com/SimpleITK/SimpleITK/issues/809

© www.soinside.com 2019 - 2024. All rights reserved.