Python中的抽象基类怎么可以被实例化?

问题描述 投票:0回答:1

令我非常惊讶的是,我可以在 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的初衷吗?

python oop abstract-class abc
1个回答
8
投票

如果没有抽象方法,您将能够实例化该类。如果你至少有一个,你就不会。

考虑以下代码:

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元类和至少一个抽象方法的组合,会导致你无法实例化一个类。如果您省略两者之一,您将能够这样做。

© www.soinside.com 2019 - 2024. All rights reserved.