在__init__处调用的方法:使其成为功能(因此是静态方法)或不是(和标准方法)

时间:2015-11-27 10:07:05

标签: python class static-methods

我对决定以下两种设计之间的标准感兴趣:

我现在是怎么做的(简化):

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:专业:更短,反对:带副作用的方法

是否有任何其他重要的概念或风格因素可能会颠覆任何一个方向的平衡?

0 个答案:

没有答案