Problem statement:个
我有100s的py文件,它们定义了简单的模式.突然间,我需要将空字符串视为没有.我希望对所有文件进行最小程度的更改.
Approach I implemented:个
我创建了一个继承类,比如
class ConstrainedStr(str):
@classmethod
def __get_validators__(cls):
yield cls.validate
@classmethod
def validate(cls, v: str, field: Field) -> Optional[str]:
v = v.strip()
if v == "":
return None
return v
然后,在所有的py文件中,我只添加了一条导入语句
from package.module import ConstrainedStr as str
幸运的是,它在第一眼就奏效了.但我最终遇到了一个问题,我有一个功能
User file:个
from package.module import ConstrainedStr as str
def validate(cls, value:str): //sample value 'asd'
if isinstance(value, str):
validation_rule()
在这里,这个条件语句失败了.
Question个
- 我如何才能避免为实现这一目标而做出重大改变?有什么办法吗?
- 实例判断失败的原因.Constrainedstr也是一个字符串,对吗?我的理解错了吗?
When I digged into this further,为了了解第二个问题的表现,我发现了以下几点.
type(ConstrainedStr)
返还type<class>
美元.
`type('123')`
返回type<str>
但当我判断builtins
包时,str
也是一个类.但是type函数返回str
的类型为str
,而ConstrainedStr
的类型为class
.因此,我的第二个问题突然出现了.
另一个例子:
class A(int):
pass
isinstance(2, A)
# False
这是我的第二个问题.