我有一个带有静态函数的抽象类,该静态函数调用其他抽象函数。但是,当我创建一个新类并覆盖抽象函数时,原始(抽象)函数仍在运行。
我写了一个与我的问题相似的例子。请帮忙。在以下示例中,我想从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()
输出:
基础
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
。