Python:静态方法重写不起作用

问题描述 投票:0回答:1

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

我写了一个与我的问题相似的例子。请帮忙。在以下示例中,我想从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()

输出:

基础

python python-3.x static abstract-class abstract-methods
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.