我想为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