我正在上一个使用图形的类。实例化此类图形对象的方法之一是使用文件路径作为构造函数参数,然后从那里读取/复制图形结构。为了进行实际的解析,我使用了辅助功能。 实际设置图形字段的正确方法是哪种? 缩短,假设魔术返回了图形结构:
class Graph:
def __init__(self, parse):
self.graph = self._parse_file(parse)
def _parse_file(file_path):
return magic(file_path)
或
class Graph:
def __init__(self, parse):
self._parse_file(parse)
def _parse_file(file_path):
self.graph = magic(file_path)
这有关系吗?在我看来,我好像丢失了一些东西。
答案 0 :(得分:2)
出于以下原因,我会选择第一个选项:
_parse_file
方法恰好可以做一件事,所以它清楚地将职责分开。在第二个选项中,它执行两件事:解析文件和更新实例状态。_parse_file
转换为classmethod
或staticmethod
并分别进行测试,而无需创建Graph
实例,当Graph.__init__
得到更大,更复杂。_parse_file
带有下划线前缀,但它仍然不是 truly 私有的,因此有人可能会在_parse_file
的现有实例上调用Graph
,第二种情况将修改其状态,您可能要避免这种情况。答案 1 :(得分:0)
您似乎步入正轨,但这有一些疑问:
Graph.graph
令人担忧。
测试:假设您打算在某个时候测试程序-您是否愿意构造图形,将其转储到文件中,然后从文件中读取并从此处检查图形?还是只保留少量静态图形文件作为灯具?
程序在晚上会困扰您(您的用户或合作者),并且随着大小/复杂度的增加而变得非常昂贵。文件是文件,数据结构是数据结构,magic()是您的读者。
可读性好吗?没有一个选项特别适合阅读。想想pd.read_csv()
-这是一个不错的filename -> new data structure
转换。 pd.Dataframe也是一种数据结构,您可以从列表/字典中构造它,而无需锁定文件。是什么使Graph
与众不同?
在下一轮设计审查中,您可以考虑: