2013-07-18 9 views
7

Pythonクラスを.pyxファイル内のエクステンションタイプに変換しました。他のCythonモジュールでこのオブジェクトを作成することはできますが、はstatic typingを実行できませんここで静的な型指定のためにCythonでエクステンションタイプを共有する

は私のクラスの一部です:

cdef class PatternTree: 

    cdef public PatternTree previous 
    cdef public PatternTree next 
    cdef public PatternTree parent 
    cdef public list children 

    cdef public int type 
    cdef public unicode name 
    cdef public dict attributes 
    cdef public list categories 
    cdef public unicode output 

    def __init__(self, name, parent=None, nodeType=XML): 
     # Some code 

    cpdef int isExpressions(self): 
     # Some code 

    cpdef MatchResult isMatch(self, PatternTree other): 
     # Some code 

    # More functions... 

私はそれを宣言する.pxdファイルを使用して試してみましたが、それは「C法[いくつかの機能]を宣言したが定義されていません」のすべてに言います私の機能。私はまた、拡張クラスのように動作させるために私の実装の機能でCのものを取り除こうとしましたが、それもうまくいきませんでした。それが立つよう

は、ここに私の.pxdです:あなたの助けのための

cdef class PatternTree: 
    cdef public PatternTree previous 
    cdef public PatternTree next 
    cdef public PatternTree parent 
    cdef public list children 

    cdef public int type 
    cdef public unicode name 
    cdef public dict attributes 
    cdef public list categories 
    cdef public unicode output 

    # Functions 
    cpdef int isExpressions(self) 
    cpdef MatchResult isMatch(self, PatternTree other) 

ありがとう!

答えて

8

修正が見つかりました。 .pyxで

:.pxdで

cdef class PatternTree: 

    # NO ATTRIBUTE DECLARATIONS! 

    def __init__(self, name, parent=None, nodeType=XML): 
     # Some code 

    cpdef int isExpressions(self): 
     # Some code 

    cpdef MatchResult isMatch(self, PatternTree other): 
     # More code 

cimport pattern_tree 
from pattern_tree cimport PatternTree 
:私はこれを使用したい

cdef class PatternTree: 
    cdef public PatternTree previous 
    cdef public PatternTree next 
    cdef public PatternTree parent 
    cdef public list children 

    cdef public int type 
    cdef public unicode name 
    cdef public dict attributes 
    cdef public list categories 
    cdef public unicode output 

    # Functions 
    cpdef int isExpressions(self) 
    cpdef MatchResult isMatch(self, PatternTree other) 

どんなCythonモジュール(.pyx)でここでのソリューションです

警告の最後の単語:は、の相対インポートをサポートしていません。これは、あなたが実行しているメインファイルを基準にモジュールパス全体を指定する必要があることを意味します。

これが誰かを助けてくれることを願っています。

+0

メモプロジェクトディレクトリがより複雑な場合は、各フォルダに__init__.pyを必ず入れてください。そうしないと、いくつかの属性が存在しないというエラーが表示されます。 – emschorsch

関連する問題