常见场景:我有一个使用其他库的库。例如,使用numpy的数学库(让我们称之为foo)。
foo的功能可以是:
这三种解决方案也可以重申为:
我们当然是在利弊情景中。透明还是不透明?与底层工具的强耦合与否?我知道演习,但我正在做这个选择,我想在做出决定前分享意见。非常感谢您的建议,想法和个人经历。
答案 0 :(得分:3)
既然你在谈论返回值,那不是真正关于“内部对象” - 你应该只记录你返回的对象将支持的接口(如果它是numpy.array
的子集或其他什么就可以了; - )。我建议不要返回对你的内部可变属性的引用,并记录mutators工作以间接改变你自己的对象(而不是记录它并不是更好) - 这导致了在路上的方式太强大的耦合。
如果你在谈论实际的内部对象,我会推荐Law of Demeter - 在一个简单的阅读中,如果客户端编码a.b.c.d.e.f()
,那么某些东西是非常错误的(“只有一个点”)可能有时是极端的,但是,“四个是正确的”)。同样,问题在于强烈的耦合 - 使您无法在不破坏一百万客户的情况下以极小的方式更改内部实施......!
答案 1 :(得分:2)
我想到的主要问题是你的库有多少会返回numpy对象?如果它普遍存在,我将直接返回一个numpy,因为你如此束缚numpy你也可以明确表示。此外,它可能会更容易使用其他基于numpy的库。另一方面,如果你只有一些方法可以返回numpy,我会选择numpy like对象或列表,可能是numpy like对象。