在我的代码中,我目前有一个 class Obj,实现了一些低级功能,没有什么特别的。现在,我需要添加Obj. 应该根据一些属性来决定实例化哪个实现,在实例化时进行检查。
我想出的解决方案是拥有一个抽象类_absObj,以及它的两个实现,_Obj1以及_Obj2. 我仍然想在 API 级别只展示一个Obj类,所以我重新实现Obj如下:
class Obj:
__new__(cls, stuff):
if _check_something(stuff):
return _Obj1(stuff)
else:
return _Obj2(stuff)
这工作正常,但我看到了一些不便:
[minor]Obj
没有记录的方法。可能这实际上是一个优势。
[major]Obj
不是 的子类absObj
,即使从它实例化的每个对象都派生自抽象类。
[major] 在测试中,我经常需要 mock Obj
,但我无法 mock 任何方法,它没有!我只能模拟它的一个实现,这是脆弱的,因为我可能会更改实现,或者实例化的实现可能会更改。
有没有更聪明的解决方案?如果解决方案意味着倾销一些 oop 噪音,那就更好了。
森栏
相关分类