Может кто-нибудь объяснить это поведение кода Python - PullRequest
0 голосов
/ 09 июля 2019

Ниже приведен фрагмент кода.Я ожидаю, что в первом операторе печати будет напечатано 456, но оно печатает 123. Может ли кто-нибудь помочь с объяснением этого?

Посмотрите на код ниже.

class employee():

    __private_var = 123
    phone_number=3274687

    def __init__(self, phone):
        self.phone_number = phone

# Private Functions

    def get_private_func(self):
        return self.__private_var

    def set_private_func(self):
        self.__private_var = 1

class VIP(employee):

    phone_number=123456
    __private_var = 456


obj1 = employee(1312321)
obj2 = VIP(1312321)
#Unable to reassign new value to private variable
print (obj2.get_private_func())

#Able to reassign new value to private variable
obj2.set_private_func()
print (obj2.get_private_func())

print (obj1.get_private_func())

Ожидаемые результаты:

456
1
123

Получил эти результаты:

123
1
123

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Это поведение приватных переменных (а именно тех, чье имя начинается с __), делает его не приватным и должно работать (работает на моей машине)

0 голосов
/ 09 июля 2019

Переменная класса __private_var должна быть инициализирована как super(employee).__private_var, а не __private_var в VIP-классе.

Другой подход:

class VIP(employee):
    __private_var = 456

    def get_private_func(self):
        return self.__private_var
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...