python - 检查基类方法的继承?
问题描述
我正在开发一组可以组合“能力”的类。一个对象可以:生成、表征或两者兼而有之。
我希望能够检查当前对象的能力,因为这可能会改变我对它的处理方式。我的想法是在基类中有一个类方法,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
.
为什么会这样?另外,我不能改变班级结构,所以这些答案对我来说没有帮助。