如何覆盖子类中基类的静态抽象方法?
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
随心所欲。
我有一个抽象 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
随心所欲。