【发布时间】:2015-05-30 07:37:18
【问题描述】:
在python中创建子类时,如何确保我的子类实现方法不会无意中覆盖超类中的实现方法?我试图避免:
class A:
def a(self):
self._helper_func()
def _helper_func(self):
# do something specific to A
class B(A):
def b(self):
self._helper_func()
def _helper_func(self):
# do something; didn't realize this would mess up a()
我认为唯一的选择是:(1)阅读超类的源代码,以确保我选择了一个唯一的子类方法名称(更新超类时可能会中断);或 (2) 在我的子类中的所有实现方法上使用 __(通常 __ 被描述为超类防止子类化的一种方式;但我认为这将有助于子类避免破坏超类)。
我错过了什么吗?
更新 @sobolevn 基本上回答了我的问题。澄清一下:我在名称修改上看到的所有讨论都围绕着试图隐藏/防止其方法被调用/覆盖的超类(并且通常有评论说这不是 python 方式,用户应该尊重一个前导 _)。我担心子类化一个我没有编写的类(并且它本身没有使用名称修饰)以及为实现方法选择名称的非常不同的问题,这可能会无意中破坏超类中的代码(或其父母)如果该名称已被使用。
根据我所阅读的内容,在我看来,(a)编写我自己没有编写的类的子类的最佳做法是将 __ 前缀到所有私有方法;但是 (b) 鉴于所有方法在 python 中都是虚拟的,并且我经常希望我的子类公开一些新的公共/受保护方法,除了完全了解所有类使用的所有未损坏方法名称之外,没有其他好的选择我继承自,并且这种意识将消除担心(a)的需求。
【问题讨论】:
-
给你的助手函数一个更具描述性的名字。说出它在做什么。
标签: python inheritance