我正在尝试为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
但是,当我使用第二个选项时,它不起作用。该变量永远不会更新。有什么我想念的东西或者我没有完全理解吗?
感谢您的输入。
最佳答案
您已经找到了解决方案,使用property
是可行的方法。
可以在类方法外部访问public
属性,而private
属性只能由类方法使用。
但是,即使在C++级别定义的public
属性也无法从Python访问。使用private
公开public
或property
属性将使其可用于Python。
关于python - Cython扩展类型属性误解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26363047/