我正在尝试为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

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

感谢您的输入。

最佳答案

您已经找到了解决方案,使用property是可行的方法。

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

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

关于python - Cython扩展类型属性误解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26363047/

10-14 16:50
查看更多