gpt4 book ai didi

python - "ABC"类有什么作用?

转载 作者:行者123 更新时间:2023-12-03 23:35:02 26 4
gpt4 key购买 nike

我写了一个继承另一个类的类:

class ValueSum(SubQuery):
output = IntegerField()

pycharm 显示以下警告:

Class ValueSum must implement all abstract methods



然后我 alt+enterABC 添加到父类(super class)。我的警告消失了。我有几个问题:
  • 在编写子类时我应该总是这样做吗?
  • 手动实现所有方法有什么区别
    还是只使用 ABC
  • ABC 是否向我的代码添加了一些内容?
  • 最佳答案

    SubQuery 是一个抽象基类(根据 abc module ),具有一个或多个您没有覆盖的抽象方法。通过将 ABC 添加到基类列表,您将 ValueSum 本身定义为抽象基类。这意味着您不会被迫覆盖这些方法,但这也意味着您无法实例化 ValueSum 本身。

    PyCharm 提前警告您需要实现从 SubQuery 继承的抽象方法;如果不这样做,当您实际尝试实例化 ValueSum 时,您将收到来自 Python 的错误。

    至于继承自 ABC 的作用,答案是……不多。设置元类很方便。以下是等效的:

    class Foo(metaclass=abc.ABCMeta):
    ...


    class Foo(abc.ABC):
    ...

    元类会修改 __new__,以便每次尝试创建类的实例时都会检查该类是否已在父类中实现了所有用 @abstractmethod 修饰的方法。

    关于python - "ABC"类有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60657399/

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