Нужно заблокировать некоторые методы из родительского класса - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть базовый класс со всеми распространенными методами.Как я могу выбрать только выбранные методы из этого базового класса и создать дочерний класс?

Я не уверен, как я могу сделать только необходимые методы доступными в дочернем классе.

Пример кодаобъяснить, что я пытаюсь сделать

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 голосов
/ 12 февраля 2019

Блокировка доступа к 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...