#!/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)