如何覆盖子类中基类的静态抽象方法?

How to override static abstract method of base in a subclass?

我有一个抽象 class,其中包含一个调用其他抽象函数的静态函数。但是当我创建一个新的 class 并覆盖抽象函数时,原始(抽象)函数仍然是 运行ning.

我已经写了一个与我的问题类似的例子。请帮忙。 在下面的示例中,我想 运行 do_something() 来自 Main 而不是 Base.

from abc import ABC, abstractmethod

class Base(ABC):
    @staticmethod
    @abstractmethod
    def do_something():
        print('Base')

    @staticmethod
    def print_something():
        Base.do_something()

class Main(Base):
    @staticmethod
    def do_something():
        print('Main')

Main.print_something()

输出:

Base

Main.print_something 不存在,因此它解析为 Base.print_something明确地 调用 Base.do_something,而不是 Main.do_something .您可能希望 print_something 成为 class 方法。

class Base(ABC):
    @staticmethod
    @abstractmethod
    def do_something():
        print('Base')

    <b>@classmethod</b>
    def print_something(<b>cls</b>):
        <b>cls</b>.do_something()

class Main(Base):
    @staticmethod
    def do_something():
        print('Main')

Main.print_something()

现在当 Main.print_something 解析为 Base.print_something 时,它仍然会接收 Main(而不是 Base)作为其参数,从而允许它调用 Main.do_something随心所欲。