如何修复由内建引起的RecursionError.来自UserString的字符串



我想为builtins.str添加这样的方法,但它会导致RecursionError。

import builtins
import unicodedata
from collections import UserString

class String(UserString):
def isnumber(self):
try:
float(self.data)
return True
except ValueError:
pass
try:
unicodedata.numeric(self.data)
return True
except (TypeError, ValueError):
pass
return False

builtins.str = String
print(str('0').isnumber())  # True
print('1'.isnumber())  # True
print('-1'.isnumber())  # True
print('0.1'.isnumber())  # True
print('a1'.isnumber())  # False

Just在python中扩展内置类

但不能直接'0'.isnumber()

import builtins
import unicodedata

class MyString(str):
def isnumber(self):
try:
float(self)
return True
except ValueError:
pass
try:
unicodedata.numeric(self)
return True
except (TypeError, ValueError):
pass
return False

builtins.str = MyString
print(str('0').isnumber())  # True
print(str('1').isnumber())  # True
print(str('-1').isnumber())  # True
print(str('0.1').isnumber())  # True
print(str('a1').isnumber())  # False

最新更新