【问题标题】:How to override static abstract method of base in a subclass?如何在子类中覆盖基类的静态抽象方法?
【发布时间】:2019-12-24 15:40:54
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      相关资源
      最近更新 更多