@xdgadd
ML/Python/Cpp

Почему функции, работающие с членами с ограниченным доступом дочернего класса, требуют перегрузки для корректной работы?

Допустим, есть 2 класса: BaseClass и ChildClass.
Если если перегрузить protected переменную в конструкторе дочернего класса,
она не обновиться в методах, доставшихся от базового:

class BaseClass(object):

    def __init__(self, param):
        self.public = param
        self.another_public = 'Another public param'
        self.__protected = "Protected param"
    
    def getProtectedParam(self):
        return self.__protected

    def printProtected(self):
        print(self.__protected)

    def printPublic(self):
        print(self.public)

    def printAnother(self):
        print(self.anotherPublic)

class ChildClass(BaseClass):

    def __init__(self, param, newpub):
        super().__init__(param)

        # Переопределяю переменные
        self.another_public = newpub
        self.__protected = 'New protected param'

    def newPrintFunc(self):
        print(self.__protected)

if __name__ == '__main__':
    base = BaseClass('Public param')
    base.printPublic()
    base.printAnother()
    base.printProtected()
    print(base.getProtectedParam(), '\n')

    child = ChildClass("Child public param", "New another public param")
    child.printPublic() # Public param
    child.printAnother() # New another public param
    child.printProtected() # Protected param
    print(child.getProtectedParam()) # Protected param
    child.newPrintFunc() # New protected param

Если перегрузить метод getProtectedParam, то значение будет возвращено новое:
# Теперь printProtected выводит New protected param
    def printProtected(self):
        print(self.__protected)
  • Вопрос задан
  • 247 просмотров
Решения вопроса 1
longclaps
@longclaps
Такие вопросы даже дочитывать лень.
Нет в питоне protected.
Нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
29 февр. 2024, в 00:43
5000 руб./за проект
28 февр. 2024, в 23:53
1000 руб./за проект
28 февр. 2024, в 23:20
10000 руб./за проект