Присвоение значения переменной экземпляра класса, начинающейся с __ вне класса. - PullRequest
0 голосов
/ 20 сентября 2018

Я новичок в python и просто пытался понять, как в нем работает объектно-ориентированное программирование.Я читал, что использование двойного _ (подчеркивание) перед переменной означает, что ее значение не может быть изменено за пределами класса.Чтобы проверить это, я попытался запустить следующий фрагмент.

class a:
    def set_value(self,x):
        self.__x = x
    def get_value(self):
        return self.__x

a_obj = a()
a_obj.set_value(10)
a_obj.__x = 1
print a_obj.__x
print a_obj.get_value()

Результат этого будет

1
10

Я не понимаю этого поведения.Когда я проверяю идентификатор обеих переменных, он становится другим.Я знаю, что существует концепция искажения имени, но я не до конца понимаю, действительно ли то, что я делаю, таково.

1 Ответ

0 голосов
/ 20 сентября 2018

Посмотрите на https://en.wikipedia.org/wiki/Name_mangling#Python

Когда вы присвоили __x за пределами класса, вы не изменили существующую переменную класса, а вместо этого создали новую.Существующий был искажен до _a__x, а вы создали новый, который на самом деле был __x

Попробуйте добавить это в конец вашего кода:

print a_obj._a__x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...