0

假设我有一个抽象基类和一个也是抽象的子类:

class Daemon(object)::
    __metaclass__ = abc.ABCMeta

    def __init__(self, pid_file):
        ...

    @abc.abstractmethod
    def run(self):
        return


class Worker(Daemon):
    __metaclass__ = abc.ABCMeta

    def __init__(self):
        ...

    def run(self):
        # do stuff
        self.process()

    @abc.abstractmethod
    def process(self):
        """
        Override this method when subclassing Worker.
        """
        return

当其他开发人员构建新的实际“工作” Worker 子类时,我想明确表示他们不应该弄乱 run 方法。如果我使用__run它暗示该方法是私有的,但是我正在创建一个私有抽象方法Daemon,这有点令人困惑。使用它来保护它似乎也很奇怪,_run因为我不希望 Worker 子类弄乱它。我意识到私有和受保护的名称只是 Python 中的有用约定,我只想让其他人清楚如何构建新的 Worker 子类。

在这种情况下是否有 Pythonic 约定?或者这只是使文档清晰的问题?

4

2 回答 2

1

您总是可以强制执行方法的非重新声明类型,尽管它很hackish:python:强制只从另一个类方法中调用一个类方法?

于 2013-08-28T15:07:48.213 回答
0

基本上要么强迫其他编码人员使用 pylint 来抱怨私人成员的使用,要么只是在他们开始倾听之前殴打他们。 顺便说一句 ,如果您使用像 hg、git、svn 这样的体面的 VCS,那么您可以找到预提交钩子的示例,这些钩子将对所有提交运行 pylint 并拒绝任何失败,这可能是执行约定的一种方式许多其他人-它还将大大提高项目质量,因此值得付出努力-只是不要期望会受欢迎。

由于您已经标记了私有方法,您还可以不时更改签名并告诉那些抱怨他们应该不理会它们的人 - pylint 可能更容易证明是合理的。

于 2013-08-28T14:44:50.813 回答