如何在pypy中注解一个类?

3 投票
2 回答
847 浏览
提问于 2025-04-16 07:26

我正在使用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

现在func似乎可以被pypy转换了。然而,当我尝试运行translate.py --source test.py时,出现了一个异常[translation:ERROR] TypeError: signature mismatch: func() takes exactly 2 arguments (1 given)。我注意到这可能是因为我还没有给self参数加上注解。不过这个self的类型是A,那我该怎么给一个类加注解呢?

感谢你的阅读和回答。

2 个回答

1

你想要的是一个 静态方法 还是一个 类方法 呢?

5

简单来说,PyPy的入口点是一个函数(通常接受sys.argv作为参数)。这个函数里面调用的任何东西(比如创建对象、调用方法)都会被标记。你不能对一个类进行标记,因为PyPy编译后的代码并不把这个作为API导出,而是作为一个独立的程序。

你可能想要做的事情比如:

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

甚至可能是:

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

在这种情况下,a是一个预先构建好的常量。

撰写回答