2011-08-09 85 views
1

我需要在另一個實例中修改C實例的非公開屬性Cython,受保護的屬性

cdef class C: 
    cdef C superC 

    cdef MakeToSuper(self, C other): 
     other.superC = C 

protected可能會做的伎倆在C,但我怎麼能實現這一目標的Cython

+0

這個問題需要澄清。你想達到什麼目的? – fabrizioM

+0

@fabrizioM C類有2個實例,* A *和* B *。他們的類定義了一個對任何用戶都不可見的屬性,但C的實例應該能夠看到並修改該屬性。我認爲這段代碼會做到這一點。 ^^ –

+0

我也不明白。在Cython上下文中,類內的cdef屬性是公共的。他們不能在Python中訪問。所以你的代碼片段正常工作?你還想要什麼? – tito

回答

0

你試過了嗎?對於「不要碰它」的消息(好吧,只有python程序員會理解它,但它比沒有更好)。

還有

__ 

雙下劃線就像在Python的「私人」(但依然可以使用,如果適當的Python機制來訪問)。

尋找__(雙下劃線),並在你的類的其他實例中使用一些python魔術來訪問它。它仍然可以從任何其他Python代碼中獲得相同的魔法,但是每個知道如何繞過它的人都知道這是出於某種原因。

+0

這就是我在Python中使用它的通常方式,我認爲在cython中可能有另一種方法。 :) 謝謝 –