如何在python中测试超类的顺序?

2024-04-27 01:14:24 发布

您现在位置:Python中文网/ 问答频道 /正文

给出以下代码:

class X(Mixin, Y):
    pass

如何编写unittest来确保Mixin类在X的超类声明中位于Y之前?你知道吗


Tags: 代码声明passunittestmixinclass
2条回答

不要测试它。除非是为Python实现本身编写测试。你知道吗

库的测试套件不负责验证Python解释器是否按设计工作。Mixin出现在声明的Y之前在阅读代码时是不言而喻的,Python在多重继承中从左到右计算初始值设定项的事实在here中有记录。你知道吗

注意:我不是说不应该测试这种行为,只是用户代码不需要重复这种测试。它应该包含在实现的测试套件中,例如用于CPython的here。你知道吗

您可以分析X.mro()的输出,它返回m方法resolutionoorder,并确保MixinY之前:

class Mixin: pass

class Y: pass

class X(Mixin, Y): pass

print(X.mro())
# [<class '__main__.X'>, <class '__main__.Mixin'>, <class '__main__.Y'>, <class 'object'>]

然而,我不确定这是否是一个实现细节,以及人们可以(或应该)依赖于子类的多少顺序。如果您的代码依赖于它,那么设计中可能有错误。你知道吗

相关问题 更多 >