[英]Making an overridden abstract method in a subclass “private”
假设我有一个抽象基类,还有一个抽象类:
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约定? 还是仅仅是使文档清晰明了?
您可以始终强制使用该方法的未声明类型,尽管该方法有点令人毛骨悚然: python:强制只从另一个类方法中调用一个类方法?
基本上,要么强迫其他编码人员使用pylint,这会抱怨私人成员的使用,要么只是打他们的头直到他们开始聆听。 顺便说一句, 如果您使用的是像Hg,git,svn这样的VCS,那么您可以找到预提交钩子的示例,这些钩子将对所有提交运行pylint并拒绝所有失败的钩子,这可能是强制执行约定的一种方法其他数量-它将大大提高项目质量,因此值得付出努力-只是不要期望它会受欢迎。
由于您已经标记了私有方法,因此您还可以不时更改签名,并告诉那些抱怨者应该将其保留下来-尽管pylint可能更容易辩解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.