2024-04-27 01:14:24 发布
网友
给出以下代码:
class X(Mixin, Y): pass
如何编写unittest来确保Mixin类在X的超类声明中位于Y之前?你知道吗
Mixin
X
Y
不要测试它。除非是为Python实现本身编写测试。你知道吗
库的测试套件不负责验证Python解释器是否按设计工作。Mixin出现在声明的Y之前在阅读代码时是不言而喻的,Python在多重继承中从左到右计算初始值设定项的事实在here中有记录。你知道吗
注意:我不是说不应该测试这种行为,只是用户代码不需要重复这种测试。它应该包含在实现的测试套件中,例如用于CPython的here。你知道吗
您可以分析X.mro()的输出,它返回m方法resolutionoorder,并确保Mixin在Y之前:
X.mro()
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'>]
然而,我不确定这是否是一个实现细节,以及人们可以(或应该)依赖于子类的多少顺序。如果您的代码依赖于它,那么设计中可能有错误。你知道吗
不要测试它。除非是为Python实现本身编写测试。你知道吗
库的测试套件不负责验证Python解释器是否按设计工作。
Mixin
出现在声明的Y
之前在阅读代码时是不言而喻的,Python在多重继承中从左到右计算初始值设定项的事实在here中有记录。你知道吗注意:我不是说不应该测试这种行为,只是用户代码不需要重复这种测试。它应该包含在实现的测试套件中,例如用于CPython的here。你知道吗
您可以分析
X.mro()
的输出,它返回m方法resolutionoorder,并确保Mixin
在Y
之前:然而,我不确定这是否是一个实现细节,以及人们可以(或应该)依赖于子类的多少顺序。如果您的代码依赖于它,那么设计中可能有错误。你知道吗
相关问题 更多 >
编程相关推荐