需要阻止父类的某些方法

时间:2019-02-12 13:42:16

标签: python design-patterns

我有一个带有所有常用方法的基类。如何仅从该基类中选择选定的方法并构建子类?

我不确定如何在子类中仅提供所需的方法。

示例代码解释我要做什么

Class Baseclass(object):

    def __init__(self):
        pass

    def method_1(self):
       pass

    def method_2(self):
       pass


Class Child(Baseclass):

    def __init__(self):
        pass

Child类中,如果仅需要method_1,该如何阻止method_2通话?

1 个答案:

答案 0 :(得分:3)

在其子类中禁止访问Baseclass方法是违反Liskov Substitution Principle的,这是继承存在的主要原因之一-用具有相同接口的子类型替换基类型。

如果您只是想让您的Child类具有Baseclass方法的不同子集,正确的方法是将Baseclass分解为实现那些通用方法的mixin(类)(每个方法必须是一个mixin-您可以按职责对它们进行逻辑分组),然后使用多重继承来创建具有所需功能集的类:

class BaseAddMixin:
  def add(self, a, b):
    return a + b

class BaseSubMixin:
  def sub(self, a, b):
    return a - b 

class BaseMulMixin:
  def mul(self, a, b):
    return a * b

# Now we want child class that has add() and mul() but not sub() method
class AddMulChild(BaseAddMixin, BaseMulMixin):
  def do_something(self, a, b):
    return self.mul(a, b) + self.add(a, b)

# We can also have child class that has add() and sub() only
class AddSubChild(BaseAddMixin, BaseSubMixin):
  def do_something(self, a, b):
    return self.add(a, b) * self.sub(a, b)