2011-08-09 23 views
1

の非公開の属性を別のインスタンス内でCのインスタンスに変更する必要があります。Cythonの保護された属性

cdef class C: 
    cdef C superC 

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

protectedは、おそらくCでトリックを行うだろうが、どのように私はCythonでこれをachiveことができますか?

+0

この質問を明確にする必要があります。あなたは何を達成しようとしていますか? – fabrizioM

+0

@fabrizioMクラス 'C'には、* A *と* B *という2つのインスタンスがあります。それらのクラスは、どのユーザーにも見えないはずの属性を定義しますが、Cのインスタンスはこの属性を参照して変更できる必要があります。コードの部分がそれをすると思った。 ^^ –

+0

私も理解していません。クラス内のcdef属性は、Cythonコンテキスト内でpublicです。 Pythonではアクセスできません。あなたのスニペットはうまくいきますか?何をもっとしたいですか? – tito

答えて

0

試しましたか? 「plsはそれを触れないでください」というメッセージについては

_ 

(OK、唯一のPythonプログラマがそれを理解しますが、ないよりは、その優れただろう)。

__ 

ダブルアンダースコアは、Pythonで「プライベート」のようなものです(それでも、適切なPythonのメカニズムを使用した場合にアクセスすることができます)もあります。

__(二重のアンダースコア)に行き、いくつかのpythonの魔法を使ってクラスの他のインスタンスでそれにアクセスします。他のPythonコードと同じ魔法でアクセスできるようになりますが、バイパスする方法を知っている人は、理由があることも知っています。

+0

それは私がPythonでやった通常の方法ですが、私はそこにcythonの別の方法があるかもしれないと思っていました。 :)ありがとう –

関連する問題