如何将参数传递给具有不同接口的重写函数?

时间:2018-07-12 13:37:18

标签: python override abstract-class

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

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_obj具有不同的接口。如何使用不同的参数调用super().__init__()

1 个答案:

答案 0 :(得分:0)

您正在使用的总体方法似乎完全不是pythonic。我强烈建议观看Raymond Hettinger在this talk

中解释Super和Pythonic继承