python - 允许保留关键字作为 CPython 中的方法
问题描述
看起来 Python 有一个不能用作方法名称的保留关键字列表。例如,
class A:
def finally(self):
return 0
返回一个SyntaxError: invalid syntax
。有一种方法可以解决它getattr/setattr
,
class A:
pass
setattr(A, 'finally', lambda self: 0)
a = A()
print(getattr(a, "finally")())
工作正常。但是,a.finally()
仍然会产生一个SyntaxError: invalid syntax
.
有没有办法避免它?更具体地说,从源代码(或代码补丁)编译 CPython 3.8 时是否有一些设置可以避免此错误?
请注意,同样的错误发生在 PyPy 3 中。
上下文是在将 CPython 构建到 WebAssembly 的 Pyodide 中,可以将 Javascripts 对象传递给 Python。并且由于目前的限制,目前,Python 代码Promise.new(...).then(...).finally(...)
会出现语法错误(参见GH-pyodide#769)
解决方案
这在 Python 中是不可能的。解决此问题的标准方法是在保留名称时附加下划线(例如finally_
)。否则,您可以选择不同的名称。
在您的特定情况下,您拥有的是 JavaScript 代码,因此不清楚为什么您希望它也是有效的 Python 代码。如果它不是你需要在 Python 领域执行的东西,那么它可能应该是一个字符串而不是原始代码;可能有一种方法可以告诉交叉编译器发出作为字符串提供的 JavaScript 代码。如果您确实需要在 Python 中执行它,那么getattr(promise, 'finally')
将检索它;在 Python 中定义一个用于处理 JavaScript 承诺的辅助函数可能会很方便,这样您就不必getattr
到处编写了。
推荐阅读
- python - 带有连接的 Peewee 查询无法按预期工作
- javascript - Vue。v-if 中的动态变量
- python - 如何使用 selenium 在 python 中获取 html 文本?
- java - 如何为 jdbctemplate.batchUpdate(String sql, List) 包含两个参数
- python - 在 Python 中定义未更改的公共变量是一种好习惯吗?
- powershell - 如果存在,如何将单个文件复制到多个目标
- javascript - 需要根据初始下拉选择设置下拉值并禁用
- arrays - 根据是否偶数过滤数组中的数字
- javascript - 是的 JS 验证模式依赖项
- python - 矩阵乘法错误:无法将系列转换为