如何在 pypy 中注释类?
我正在使用 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:签名不匹配:func() 仅需要 2 个参数(给定 1 个)
被提出。我注意到这可能是因为我还没有注释 self 参数。然而这个self
有类型A,那么我如何注释一个类呢?
感谢您的阅读和回答。
I am using pypy to translate some python script to C language.
Say that I have a python class like this:
class A:
def __init__(self):
self.a = 0
def func(self):
pass
I notice that A.func
is a unbound method rather than a function so that it cannot be translated by pypy. So I change the code slightly:
def func(self):
pass
class A:
def __init__(self):
self.a = 0
A.func = func
def target(*args):
return func, None
Now func
seems to be able to be translated by pypy. However when I try translate.py --source test.py
, an exception [translation:ERROR] TypeError: signature mismatch: func() takes exactly 2 arguments (1 given)
is raised. I notice that it might because I haven't annotate self
argument yet. However this self
have type A, so how can I annotate a class?
Thank you for your reading and answer.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
本质上 PyPy 的入口点是一个函数(通常接受 sys.argv 作为参数)。该函数调用的任何内容(创建对象、调用方法)都会被注释。无法注释类,因为 PyPy 的编译代码不会将其导出为 API,而是导出为独立程序。
例如,您可能想要:
甚至:
在这种情况下 a 是预构建的常量。
Essentially PyPy's entry point is a function (accepting sys.argv usually as an argument). Whatever this function calls (create objects, call methods) will get annotated. There is no way to annotate a class, since PyPy's compiled code does not export this as API, but rather as a standalone program.
You might want to for example:
or even:
in which case a is a prebuilt constant.
您想要一个 staticmethod 还是 classmethod?
Are you wanting a staticmethod or a classmethod?