我正在尝试为cython类中的成员授予python访问权限。会员类型是基本的(例如int
或float
)
正如我在文档中所读到的,您可以使用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
但是当我使用第二个选项时,它不起作用。该变量永远不会更新。有什么东西我缺少或者我没有完全理解?
感谢您输入。
答案 0 :(得分:1)
您已找到解决方案,使用property
即可。
可以在类方法之外访问public
属性,而private
属性只能由类方法使用。
但是,无法从Python访问在C ++级别定义的public
属性。使用private
公开public
或property
属性将使其可供Python使用。