3

pypy を使用して、いくつかの python スクリプトを C 言語に翻訳しています。次のような python クラスがあるとします。

class A:
    def __init__(self):
        self.a = 0
    def func(self): 
        pass

これA.funcは関数ではなくバインドされていないメソッドであるため、pypy で変換できないことに気付きました。そこで、コードを少し変更します。

def func(self): 
    pass
class A:
    def __init__(self):
        self.a = 0
A.func = func
def target(*args):
    return func, None

pypyfuncで翻訳できるようになりました。ただし、試してみるtranslate.py --source test.pyと、例外[translation:ERROR] TypeError: signature mismatch: func() takes exactly 2 arguments (1 given)が発生します。selfまだ引数に注釈を付けていないためかもしれません。ただし、これselfにはタイプ A があるため、クラスに注釈を付けるにはどうすればよいですか?

お読みいただき、ご回答いただきありがとうございます。

4

2 に答える 2

5

基本的に、PyPy のエントリ ポイントは関数です (通常は sys.argv を引数として受け入れます)。この関数が呼び出すもの (オブジェクトの作成、メソッドの呼び出し) には注釈が付けられます。PyPy のコンパイル済みコードはこれを API としてエクスポートせず、スタンドアロン プログラムとしてエクスポートするため、クラスに注釈を付ける方法はありません。

たとえば、次のことが必要になる場合があります。

def f():
    a = A()
    a.func()

あるいは:

a = A()
def f():
   a.func()

この場合、a は事前に作成された定数です。

于 2010-11-22T13:16:43.413 に答える
1

staticmethodまたはclassmethodが必要ですか?

于 2010-11-22T02:21:08.060 に答える