如何在子类中重写base的静态抽象方法?

时间:2019-12-24 15:40:54

标签: python python-3.x static abstract-class abstract-methods

我有一个带有静态函数的抽象类,该静态函数调用其他抽象函数。但是,当我创建一个新类并覆盖抽象函数时,原始(抽象)函数仍在运行。

我写了一个类似于我的问题的例子。请帮忙。 在以下示例中,我要从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

1 个答案:

答案 0 :(得分:3)

Main.print_something不存在,因此解析为Base.print_something明确地将其称为Base.do_something,而不是Main.do_something。您可能希望print_something成为类方法。

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

    @classmethod
    def print_something(cls):
        cls.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