我们可以在没有实例化的类别中调用一种方法



我想询问是否有一种方法在没有实例化的情况下在类中实现接口方法,甚至是更多的方法,是否完全是不良习惯?如果是这样,实现复杂接口方法的正确方法是什么?

这是我的代码的原型:

class calculator(abc.ABC):
    @abc.abstractmethod
    def calculate(self):
        "start model"
class subcalculator(calculator):
    def calculate(self):
        return model.attr2 ** 3
    def recalculate(self):
        z = calculate(self)
        return z ** 2

但是,当运行subcalculator.recalculate未实例化时,该报告未定义calculate()

由于我只是为模型编写接口类,我想写启动不是一个好主意。(或者是吗?(在这种情况下我该怎么办?

编辑:根据@Chepner的答案,我还弄清楚了一些解决此问题的方法,我不确定这是正确的练习:

    @classmethod
    def recalculate(cls, self):
        z = cls.calculate(self)
        return z ** 2

还值得一提的是结构的对象/模型部分:

#In model.py
class model(object):
    def __init__(self, attr1):
        self.attr1 = attr1
class submodel(model):
    def __init__(self, attr1, attr2):
        super().__init__(attr1)
        self.attr2 = attr2

所以我希望将calculator写为可以与model等交互的接口类。

calculate是一种方法

class subcalculator(calculator):
    def calculate(self):
        return model.attr2 ** 3
    def recalculate(self):
        z = subcalculator.calculate(self)
        return z ** 2

当然,最好让继承模型确切确定需要调用哪种calculate方法:

def recalculate(self):
    z = self.calculate()
    return z ** 2

最新更新