Python 属性可更改值类型并正确使用 mypy

问题描述 投票:0回答:1

我尝试学习如何正确使用类属性

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”)

如何正确解决这个警告?

python mypy type-hinting
1个回答
0
投票

我认为,鉴于

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
只需要一点帮助就能认识到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.