所以,关于什么是 Pythonic 的另一个问题!在这种情况下,应用程序领域是网络算法(如节点、边、Dijkstra 之类的东西......),我以前只用强类型语言编码过,我们可以非常确定一切都是什么。
同时在 Python 中,我有一个类Net
;此类的单个实例代表一个网络。我有一个Edge
为网络中的每个边缘实例化的类。Edge
除其他外,每个实例都有一个唯一的id
.
有时我希望通过引用相关Edge
实例来删除边缘。其他时候我希望使用它的id
. 老实说,我开始忘记哪些变量是Edges
,哪些是ids
. 我想我更喜欢 C++ 来完成这项工作:-P
所以我提出两个解决方案:
开始使用系统匈牙利符号 - 更好地命名我的变量,以便我知道它们是实际的 Edge 对象还是只是我想要的 Edge 的 id。实现强类型——make
remove_edge
(这是一个方法Net
)明确拒绝任何不是Edge
. 制作一个包装函数remove_edge_id
,从中查找相关内容Edge
,id
然后调用remove_edge
; 这个函数同样拒绝任何不是id
.使用鸭子打字。
remove_edge
检查参数是 anid
还是 an并用它做Edge
正确的事情。
你猜怎么着?