Блокировка доступа к Baseclass
методу (методам) в его дочерних классах противоречит Принципу подстановки Лискова , который является одной из основных причин существования наследования - замена базового типа его подтипами с тем же интерфейсом.
Если вы просто хотите, чтобы ваши Child
классы имели разные подмножества Baseclass
методов, правильным подходом было бы разбить Baseclass
на миксины (классы), реализующие эти общие методы (это не обязательно должен быть один).mixin per method - вы можете сгруппировать их логически по обязанностям), а затем использовать множественное наследование для создания классов с требуемыми наборами функций:
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)