我对决定以下两种设计之间的标准感兴趣:
我现在是怎么做的(简化):
class CommentThread(object):
def __init__(self, url):
self.req = requests.get(url)
self.soup = BeautifulSoup(self.req)
self.graph = self.parse_thread(self.soup)
@staticmethod
def parse_thread(a_soup):
raise NotImplementedMethod("subclasses should implement this!")
class CommentThreadType1(CommentThread):
def __init__(self, url):
super(CommentThreadType1, self).__init___(url)
@staticmethod
def parse_thread(url):
# actual implementation
a_graph = nx.DiGraph()
# add nodes, edges and attributes to a_graph
return a_graph
这是我正在考虑的替代方案
class CommentThread(object):
def __init__(self, url):
self.req = requests.get(url)
self.soup = BeautifulSoup(self.req)
self.graph = nx.DiGraph()
class CommentThreadType1(CommentThread):
def __init__(self, url):
super(CommentThreadType1, self).__init___(url)
self.parse_thread(self.url)
def parse_thread(self, url):
# add nodes, edges and attributes to self.graph
在功能方面,两种方法都同样有效。我感兴趣的是,如果有充分的理由希望采用另一种方法。
我看到的唯一考虑因素如下:
选项1: pro:big_method纯粹是功能性的,概念上big_method实际上是一个静态方法(它在所有实例中都做同样的事情); contra:父类没有实现(抽象)方法
选项2:专业:更短,反对:带副作用的方法
是否有任何其他重要的概念或风格因素可能会颠覆任何一个方向的平衡?