亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Cython 類 AttributeError

Cython 類 AttributeError

慕沐林林 2021-12-09 10:27:37
我開始嘗試 Cython 并遇到以下問題。考慮以下表示 3D 空間中的頂點的類:#Vertex.pyxcdef 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 vtv1 = 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.xAttributeError: 'Vertex.Vertex' object has no attribute 'x'任何想法為什么會發生這種情況?
查看完整描述

1 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

默認情況下,cdef屬性只能從 Cython 內部訪問。如果您將其設置cdef public為屬性名稱前面的公共屬性,則 Cython 將生成合適的屬性以便能夠從 Python 訪問它。


關于相關問題的一些額外說明:

如果您在 Cython 中遇到同樣的錯誤,那么您可能忘記告訴 Cython 您的實例變量的類型(例如v1)——Cython 本身可以愉快地訪問cdef屬性,但它只有在知道類型時才知道它們。如果它只是一個變量,那么cdef該變量。如果您嘗試使用函數的返回值,或索引列表或類似內容,則可以使用 cast: <Vectex>(func()).x。僅當您確定類型時才執行此操作。

您可能會遇到類似的cdef函數錯誤,這些錯誤再次僅在 Cython 中可見。在這種情況下cpdef,該函數對 Cython 和 Python 都可見。但是,cpdef函數在某些方面是最糟糕的(它們具有cdef函數的所有限制和def函數的所有限制) - 通常最好選擇 Cython-only ( cdef) 或 Python ( def) 接口。


查看完整回答
反對 回復 2021-12-09
  • 1 回答
  • 0 關注
  • 357 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號