【问题标题】:In python, Can an abstract class be instantiated?在python中,可以实例化一个抽象类吗?
【发布时间】:2021-08-02 12:27:22
【问题描述】:
from abc import ABC, abstractmethod

class Example(ABC):
    def smile(self):
        print("smile")

我的理解是Example在继承ABCclass时变成AbstractClassAbstractClass 无法实例化,但 以下代码执行没有错误

example = Example()

【问题讨论】:

  • 添加@abstractmethod 装饰器,以便类在实例化之前必须被覆盖。
  • 你是说Example 不是AbstractClass,直到它包含@abstractmethod decorator?那么继承ABC 会做什么呢?
  • 它确实变得抽象了,尽管其中包含的方法是具体的。您需要将内部的方法抽象化,以便您无法实例化它。

标签: python inheritance abstract-class abstract abc


【解决方案1】:

尽管其中包含的方法/方法(即smile)是具体的,但您的类确实变得抽象了。您需要使用装饰器@abc.abstractclass 使内部的方法抽象化。因此,如果您将代码重写为:

from abc import ABC, abstractmethod

class Example(ABC):
    @abstractmethod
    def smile(self):
        print("smile")
        
e = Example()

那么你会得到错误:

TypeError: Can't instantiate abstract class Example with abstract methods smile

【讨论】:

    猜你喜欢
    • 2020-11-21
    • 2011-06-02
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多