gpt4 book ai didi

python - 抽象基类不强制执行函数实现

转载 作者:太空狗 更新时间:2023-10-30 00:55:07 25 4
gpt4 key购买 nike

from abc import abstractmethod, ABCMeta

class AbstractBase(object):
__metaclass__ = ABCMeta

@abstractmethod
def must_implement_this_method(self):
raise NotImplementedError()

class ConcreteClass(AbstractBase):

def extra_function(self):
print('hello')

# def must_implement_this_method(self):
# print("Concrete implementation")


d = ConcreteClass() # no error
d.extra_function()

我正在使用 Python 3.4。我想定义一个抽象基类,它定义了一些需要由它的子类实现的函数。但是当子类没有实现该函数时,Python 不会引发 NotImplementedError...

最佳答案

声明元类的语法 在 Python 3 中发生了变化。代替 __metaclass__ 字段,Python 3 在基类列表中使用关键字参数:

import abc

class AbstractBase(metaclass=abc.ABCMeta):
@abc.abstractmethod
def must_implement_this_method(self):
raise NotImplementedError()

现在调用 d = ConcreteClass()引发异常因为 元类 派生自 ABCMeta 不能实例化,除非它的所有抽象方法和属性都被覆盖(有关更多信息,请参阅 @abc.abstractmethod):

TypeError: Can't instantiate abstract class ConcreteClass with abstract methods
must_implement_this_method

希望这有帮助:)

关于python - 抽象基类不强制执行函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31201706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com