为什么 mypy 试图在 Python 中实例化我的抽象类?
python 281
原文标题 :Why is mypy trying to instantiate my abstract class in Python?
如果我有这样的 Python 模块:
from abc import ABC, abstractmethod
class AbstractClass(ABC):
@abstractmethod
def method(self):
pass
class ConcreteClass1(AbstractClass):
def method(self):
print("hello")
class ConcreteClass2(AbstractClass):
def method(self):
print("hello")
class ConcreteClass3(AbstractClass):
def method(self):
print("hello")
classes = [
ConcreteClass1,
ConcreteClass2,
ConcreteClass3,
]
for c in classes:
c().method()
我用mypy test.py
击中它,我明白了:
test.py:27: error: Cannot instantiate abstract class "AbstractClass" with abstract attribute "method"
虽然代码运行没有任何问题,但我在逻辑中看不到任何问题。我绝不会尝试直接实例化AbstractClass
。
我注意到一些奇怪的行为:
如果,而不是循环,我这样做:
...
ConcreteClass1().method()
ConcreteClass2().method()
ConcreteClass3().method()
mypy 很高兴。
此外,如果不是循环中的 3 个类,而是执行 2 个:
classes = [
ConcreteClass1,
ConcreteClass2,
#ConcreteClass3,
]
for c in classes:
c().method()
mypy 对此也很满意。这是怎么回事?这是一个mypy错误吗?如果是这样,我可以告诉 mypy 忽略这个“问题”吗?