如何使用@abstractmethod 创建一个抽象接口,指定其构造函数的参数结构?

How to use @abstractmethod to create an abstract interface that specifies the argument structure of its constructor?

我明白为什么下面的代码会抛出异常,并且有些方法可以避免该异常,但我不明白使用@abstractmethod 来创建抽象接口的预期方法。

我的目标是

问题是,如果我在构造函数中添加对“super”的适当调用,我最终会调用抽象方法并引发异常。

我感觉我在想这个问题。什么是 pythonic 方式??


from abc import ABC, abstractmethod

class Foo(ABC):
    @abstractmethod
    def __init__(self, my_arg):
        raise NotImplementedError


class FooAdapter(Foo):
    def __init__(self, my_arg):
        super().__init__()

来自以下接受的答案

您根本不需要使用 NotImplementedError,只需使用 'pass'。 如果 subclass 没有实现指定的方法,@abstractmethod 机制将抛出异常。

来自 abc.abstarctmethod description:

Note: Unlike Java abstract methods, these abstract methods may have an implementation. This implementation can be called via the super() mechanism from the class that overrides it. This could be useful as an end-point for a super-call in a framework that uses cooperative multiple-inheritance.

因此你只需要让 stub 什么都不做而不是提高 NotImlementedError.