如何备份str.removeprefix等方法



Python 3.9引入了str.removeprefix((。我在这里只是举个例子。

比方说,我想在一个库中使用这个新功能,该库应该在所有支持的Python版本上运行(目前还有3.6、3.7和3.8(。我的意思是直接使用:mystring.removeprefix('xy_')

我试过这个:

if sys.version_info < (3,9):
def removeprefix_compat(self, prefix):
# implement removeprefix (or just copy it from PEP-616)
return 'TODO'
str.removeprefix = removeprefix_compat

但结果是:CCD_ 2。

因此,这似乎要到2024/2025年冬季才能实现(3.8将处于EOL状态(。真的是这样吗?

更新1(基于@buran评论的链接(:

这打破了一切:

import json, builtins
class PatchedStr(str):
pass
builtins.str = PatchedStr
json.loads('"aaa"')
# TypeError: the JSON object must be str, bytes or bytearray, not str

事实:

  • monkey修补内置程序介于困难和不可能之间,这通常是一件好事
  • 无论如何,您都需要提供一个回退实现,那么有条件地使用内置方法有什么意义呢?冒着不同Python版本之间行为差异的风险

结论:

如果您需要支持较旧的Python版本,那么就好像只有您想要支持的最低版本可用一样进行开发。也就是说,如果您将Python 3.6设置为所需的最低版本,那么只使用Python 3.6中可用的功能,并将较新版本中的任何功能视为不存在,因为事实上,它在您想要支持的至少一个版本中都不存在

最新更新