使用抽象私有方法作为接口

时间:2015-06-02 14:44:42

标签: python oop interface

假设我有一个代表某个接口的基类

class Parser(object):

    __metaclass__ = ABCMeta

    @abstractmethod
    def _parse(self, text):
        """Internal interface. This is somethig a potential
        user must implement for his own implementation of Parser"""

        pass

    def add_quotes(self, text):
        """some postprocessing. Say, every parser should have quotes"""
        # ...

    def parse(self, text):
        """External interface. Whoever uses children of Parser will
        use this method"""

        return self.add_quotes(self._parse(text))

对于“内部”API使用私有方法是否可以(即让用户覆盖接口实现的私有方法)和外部使用的常规方法?这看起来有点奇怪......我看到了几种替代方法,但不知道哪一种更好:

  • 使用元类通过某些后处理“包装”覆盖方法。一个优点是内部和外部接口具有单一名称
  • 具有同义名称,例如内部和外部方法分别为preparseparse
  • 负责为所有接口实现添加引号,并通过测试确保这一点。但这种方法似乎不太安全

0 个答案:

没有答案