令我非常惊讶的是,我可以在 python 中实例化一个抽象类:
from abc import ABC
class Duck(ABC):
def __init__(self, name):
self.name = name
if __name__=="__main__":
d = Duck("Bob")
print(d.name)
上面的代码编译得很好并打印出预期的结果。这不是违背了ABC的初衷吗?
如果没有抽象方法,您将能够实例化该类。如果你至少有一个,你就不会。
考虑以下代码:
from abc import ABC, abstractmethod
class Duck(ABC):
def __init__(self, name):
self.name = name
@abstractmethod
def implement_me(self):
...
if __name__=="__main__":
d = Duck("Bob")
print(d.name)
返回:
TypeError: Can't instantiate abstract class Duck with abstract method implent_me
它是ABC元类和至少一个抽象方法的组合,会导致你无法实例化一个类。如果您省略两者之一,您将能够这样做。