python - python中的抽象基类怎么可以实例化?

标签 python oop abstract-class abc

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

关于python - python中的抽象基类怎么可以实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70951929/

相关文章:

c++ - 使用抽象来制作翻译器

c# - 是否可以在子类上定义成员而不在抽象父类上定义它? C#

python - 如何有效地检查python中的连续范围

Python:不使用循环的列和行操作

laravel - 基本的 OOPS 概念需要澄清

.net - 开始解耦对象的最佳位置

python - 在 python 中使用具有非整数类型的枚举是一种不好的做法吗?

python - 将程序添加到 PATH 有什么意义?

MVC 遗留中的 Java OOP

java - 类构造函数中的抽象方法