我有一个带有所有常用方法的基类。如何仅从该基类中选择选定的方法并构建子类?
我不确定如何在子类中仅提供所需的方法。
示例代码解释我要做什么
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
通话?
答案 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)