class Foo:
    bar: str

class Bat(Foo):
    @property
    def bar(self) -> str:
        ...

对于上面的代码,我的类型判断器(Mypy)提出了以下问题:

error: Signature of "bar" incompatible with supertype "Foo"  [override]

这让我感到惊讶,因为从访问bar属性/属性的调用方的Angular 来看,FooBat的实例的行为是相同的.类型判断器通过拒绝此代码来防止什么问题?

推荐答案

将 comments 扩大到OP:

Mypy的旧版本存在某种与此相关的问题/错误,导致在项目的GitHub:Mypy disallows overriding an attribute with a property上进行了一些讨论,该问题本应在版本>;=v0.990上得到修复

还有一个让人感觉更接近当前的OP展会的讨论:overriding variable with property: error Signature incompatible with supertype

在第二种情况下,发生的情况是...

class Foo:
    bar: str

...告诉Mypy .bar将是一个可写属性,而只是在子类Bat中声明@property...

class Bat(Foo):
    @property
    def bar(self) -> str:

...会将该属性设置为只读.在本例中,最直接的解决方法可能是为.bar创建一个setter.

以下代码:

class Foo:
    bar: str


class Bat(Foo):
    @property
    def bar(self) -> str:
        return "something"

    @bar.setter
    def bar(self, value: str):
        # ... actual setter code probably
        # for self._bar or something like that
        pass

产生:

Success: no issues found in 1 source file

Python相关问答推荐

如何使用Tkinter创建两个高度相同的框架(顶部和底部)?

请从Python访问kivy子部件的功能需要帮助

在Python中为变量的缺失值创建虚拟值

在函数内部使用eval(),将函数的输入作为字符串的一部分

使用Keras的线性回归参数估计

将特定列信息移动到当前行下的新行

将jit与numpy linSpace函数一起使用时出错

标题:如何在Python中使用嵌套饼图可视化分层数据?

如何获取numpy数组的特定索引值?

numpy卷积与有效

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

cv2.matchTemplate函数匹配失败

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

Scrapy和Great Expectations(great_expectations)—不合作

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

基于形状而非距离的两个numpy数组相似性

Python—转换日期:价目表到新行

将一个双框爆炸到另一个双框的范围内

如何提高Pandas DataFrame中随机列 Select 和分配的效率?