Cython扩展类型属性误解

时间:2014-10-14 14:14:59

标签: python c++ cython

我正在尝试为cython类中的成员授予python访问权限。会员类型是基本的(例如intfloat

正如我在文档中所读到的,您可以使用properties来访问底层C ++成员:

cdef class myPythonClass:

   # grant access to myCppMember thanks to myMember
   property myMember:
      def __get__(self):
        return self.thisptr.myCppMember # implicit conversion
      # would somehow be the same logic for __set__ method

现在可行。

但是,据我所知,对于基本类型,您只需使用extension types即可。在这种情况下,您使成员public使其可访问和/或可写。您不需要属性:

 cdef class myPythonClass:
    cdef public int myCppMember # direct access to myCppMember

但是当我使用第二个选项时,它不起作用。该变量永远不会更新。有什么东西我缺少或者我没有完全理解?

感谢您输入。

1 个答案:

答案 0 :(得分:1)

您已找到解决方案,使用property即可。

可以在类方法之外访问public属性,而private属性只能由类方法使用。

但是,无法从Python访问在C ++级别定义的public属性。使用private公开publicproperty属性将使其可供Python使用。