0

在我的框架中,我必须确保当一个类从 ClassA 继承时,它也必须从 ClassB 继承,ClassB 跟在 ClassA 之后(为了使被覆盖的方法[在 Django 表单中])。例如

class MyClass(ClassA, ClassB) --> correct

class MyClass(ClassA) --> wrong

class MyClass(ClassB, ClassA) --> wrong

有没有办法让 ClassA 检查它是否跟在 ClassB 后面(在启动时或运行时)?

4

2 回答 2

3

不需要特定的继承顺序,而是提供使用ClassC正确顺序的 a :

class ClassC(ClassA, ClassB):

可以使用元类来验证基类,但是如果使用简单的基类就可以做到这一点。ClassA也将为子类调用元类,ClassA然后您只需测试bases参数以获取正确的顺序。

于 2013-05-02T10:05:38.857 回答
1

在定义类之后有一种方法可以做到这一点。它使用mro()方法。如果你有这样的事情

class A(object):
    pass

class B(object):
    pass

class C(A,B):
    pass

如果您打印输出,mro您将获得以下信息。

print(A.mro(), B.mro(), C.mro())
([<class '__main__.A'>, <type 'object'>], 
[<class '__main__.B'>, <type 'object'>], 
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <type 'object'>])

一种方法可能是:

if C.mro()[1] == A.mro()[0] and C.mro()[2] == B.mro()[0]:
    go ahead
else:
    raise Exception
于 2013-05-02T10:06:10.473 回答