小编Suk*_*mbu的帖子

MyPy:虚拟类继承的“不兼容类型”

演示代码

#!/usr/bin/env python3

from abc import ABCMeta, abstractmethod

class Base(metaclass = ABCMeta):
    @classmethod
    def __subclasshook__(cls, subclass):
        return (
            hasattr(subclass, 'x')
        )

    @property
    @abstractmethod
    def x(self) -> float:
        raise NotImplementedError

class Concrete:
    x: float = 1.0

class Application:
    def __init__(self, obj: Base) -> None:
        print(obj.x)

ob = Concrete() 
app = Application(ob)

print(issubclass(Concrete, Base))
print(isinstance(Concrete, Base))
print(type(ob))
print(Concrete.__mro__)
Run Code Online (Sandbox Code Playgroud)

python test_typing.py返回:

1.0
True
False
<class '__main__.Concrete'>
(<class '__main__.Concrete'>, <class 'object'>)
Run Code Online (Sandbox Code Playgroud)

mypy test_typing.py返回:

test_typing.py:30: error: Argument 1 to "Application" has incompatible …
Run Code Online (Sandbox Code Playgroud)

python type-hinting mypy

6
推荐指数
1
解决办法
1592
查看次数

标签 统计

mypy ×1

python ×1

type-hinting ×1