gpt4 book ai didi

python - Cython 类属性错误

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:40 24 4
gpt4 key购买 nike

我已经开始尝试使用 Cython 并遇到了以下问题。考虑以下表示 3D 空间中的顶点的类:

#Vertex.pyx
cdef class Vertex(object):
cdef double x, y, z
def __init__(self, double x, double y, double z):
self.x = x
self.y = y
self.z = z

现在我尝试从 Python 控制台创建一个对象:

import Vertex as vt
v1 = vt.Vertex(0.0, 1.0, 0.0)

效果很好。但是,当我尝试访问类属性时,我得到了一个 AttributeError:

print v1.x
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-6-83d928d774b7> in <module>()
----> 1 print v1.x

AttributeError: 'Vertex.Vertex' object has no attribute 'x'

知道为什么会发生这种情况吗?

最佳答案

默认 cdef属性只能从 Cython 中访问。如果you make it a public attributecdef public在属性名称前面,Cython 将生成合适的属性,以便能够从 Python 访问它。


一些关于相关问题的额外注释:

如果您在 Cython 中遇到相同的错误,那么您可能忘记告诉 Cython 您的实例变量的类型(例如 v1 )- Cython 本身可以愉快地访问 cdef属性,但它只有在知道类型时才知道它们。如果它只是一个变量那么cdef那个变量。如果你试图使用函数的返回值,或者索引列表,或者类似的,那么你可以使用强制转换:<Vectex>(func()).x . 仅当您确定类型时才执行此操作。

您可以使用 cdef 得到类似的错误功能,这些功能再次仅在 Cython 中可见。在这种情况下 cpdef使该函数对 Cython 和 Python 可见。然而,cpdef函数在某些方面是所有世界中最糟糕的(它们具有 cdef 函数的所有限制和 def 函数的所有限制) - 你通常最好选择 Cython-only(cdef)或 Python( def ) 接口(interface)。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com