首页 > 解决方案 > 检查基类方法的继承?

问题描述

我正在开发一组可以组合“能力”的类。一个对象可以:生成、表征或两者兼而有之。

我希望能够检查当前对象的能力,因为这可能会改变我对它的处理方式。我的想法是在基类中有一个类方法,isinstance()用于确定对象可以做什么。这对我不起作用。

这是一些代码来演示我的意思:

class BaseTest:

    def __init__(self):
        pass

    @classmethod
    def can_gen(cls):
        return isinstance(cls, GenTest)

    @classmethod
    def can_char(cls):
        return isinstance(cls, CharTest)


class GenTest(BaseTest):

    def __init__(self):
        super().__init__()

    def gen(self, x):
        pass


class CharTest(BaseTest):

    def __init__(self):
        super().__init__()

    def characterize(self, x):
        pass


class MainTest(GenTest, CharTest):

    def __init__(self):
        super().__init__()

    def gen(self, x):
        print(x)

    def characterize(self, x):
        print(x)

if __name__ == "__main__":

    test = MainTest()

    x = isinstance(test, GenTest)
    y = isinstance(test, CharTest)
    z = MainTest.can_gen()

    print(x)
    print(y)
    print(z)

这是输出:

True
True
False

很明显,没有使用 classmethod 按预期工作,但是当尝试使用 classmethod 时,它正在返回False.

为什么会这样?另外,我不能改变班级结构,所以这些答案对我来说没有帮助。

标签: pythonmultiple-inheritance

解决方案


推荐阅读