首页 > 解决方案 > 如何将参数传递给具有不同接口的重写函数?

问题描述

情况是:一个抽象的基类定义了一组通用的动作,而将一堆专门的动作留给了子类。

from abc import ABC,abstractmethod
class Common(ABC):
    def __init__(self,ord_obj):
        self.ord_obj = ord_obj
        self.abs_obj = self.generate_abs_obj(?)

    @abstractmethod
    def generate_abs_obj(self):
        # Will be implemented in subclasses
        pass

    def common_operation(self):
        return self.ord_obj + self.abs_obj


class specialize_1(Common):
    def __init__(self):
        super().__init__()

    def generate_abs_obj(self,param_1):
        # do something
        return 25

class specialize_2(Common):
    def __init__(self):
        super().__init__()

    def generate_abs_obj(self,param_1,param_2):
        # do something
        return param_1+param_2

如上图,abs_obj是通过抽象方法生成并在基类中初始化的对象__init__。它将通过普通方法在基类中使用。但是,generate_abs_objin 子类具有不同的接口。如何super().__init__()使用不同的参数调用?

标签: pythonoverridingabstract-class

解决方案


您使用的整体方法似乎完全不是pythonic。我强烈建议观看 Raymond Hettinger 在本次演讲中解释 Super 和 Pythonic 继承


推荐阅读