我尝试学习如何正确使用类属性
import datetime
from typing import ClassVar
class TestProperty(object):
today: ClassVar[datetime.datetime] = datetime.datetime.today()
def __init__(self, start: str):
self.start = start
@property
def start(self) -> datetime.datetime:
return self._start
@start.setter
def start(self, value: str) -> None:
start_h, start_m = [int(val) for val in value.split(":")]
self._start: datetime.datetime = TestProperty.today.replace(hour=start_h, minute=start_m)
if __name__ == "__main__":
tp = TestProperty("12:00")
print(tp.start)
我的代码从 mypy 端到这个字符串收到了警告
self.start = start
赋值中的类型不兼容(表达式的类型为“str”,变量的类型为“datetime”)
如何正确解决这个警告?
我认为,鉴于
self.start
的“拆分”类型(取决于您是进行查找还是赋值),您能做的最好的事情就是使用 cast
告诉类型检查器假装 str
是 datetime.datetime
。
from typing import cast
class TestProperty:
...
def __init__(self, start: str):
self.start = cast(datetime.datetime, start)
...
你知道
TypeProperty.start.fset
需要一个str
; mypy
只需要一点帮助就能认识到这一点。