Как именно работает инкапсуляция через скрытие данных в Python? начинающий - PullRequest
0 голосов
/ 10 ноября 2019

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

Пример такой инкапсуляции:

class Car:

    __maxspeed = 0
    __name = ""

    def __init__(self):
        self.__maxspeed = 200
        self.__name = "Corolla"

    def drive(self):
        print("Max speed is: " + str(self.__maxspeed))

    def setMaxSpeed(self,speed):
        self.__maxspeed = speed

car_a = Car()
car_a.drive()
car_a.setMaxSpeed(320)
car_a.drive()

Строка car_a.drive() ведет нас к print("Max speed is: " + str(self.__maxspeed)). Откуда берется значение для этого конкретного self__maxspeed и почему?

По выводу я вижу, что это 200. И вывод car_a.setMaxSpeed(320) равен 320. Так что тот же вопрос здесь с 320. И, наконец, какова функция __maxspeed = 0 и __nane = ""?

Извините за обширный вопрос. Я новичок в Python, и эти примеры меня смутили. Я очень ценю любую помощь и время.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2019

__init__() вызывается каждый раз, когда создается какой-либо объект.

После создания объекта __init__() вызывается автоматически.

В этом случае __init__() инициализируется __maxspeed со значением 200 . Затем вы напечатали значение __maxspeed (то есть 200 ), используя функцию drive().

Позже вы вызвали setMaxSpeed() с 320 какстоимость. Внутри этой функции она присвоила 320 переменной __maxspeed этого объекта, которая имеет 200 в качестве начального значения.

Теперь вы снова вызвали функцию drive() для вывода значения__maxspeed, который сейчас 320 . Итак, 320 напечатано.

0 голосов
/ 10 ноября 2019

Откуда берется значение (200) для этого конкретного self__maxspeed и почему?

Оно исходит из метода __init__, который вызывается при вызове Car():

self.__maxspeed = 200

Каждый раз, когда вы создаете Car, он будет иметь maxspeed 200, пока вы не установите его на другое значение.

И вывод car_a.setMaxSpeed(320) равно 320. То же самое относится и к 320.

Вот функция setMaxSpeed:

def setMaxSpeed(self,speed):
    self.__maxspeed = speed

Как вы можете видеть, она принимает все, что вы передаете, какаргумент (320) и устанавливает self.__maxspeed к нему. Ничего загадочного в этом нет. Это Car теперь будет иметь maxspeed 320, пока вы не установите его на что-то другое.

и наконец, какова функция __maxspeed = 0 и __name = ""

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

...