在 Python 中,通过数据隐藏进行封装究竟是如何工作的?初学者

How exactly does Encapsulation via Data Hiding Work in Python? Beginner

我将在 Python 中介绍 Class 多态性,特别是封装和数据隐藏。

这种封装的例子是:

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 和 [=17 的功能是什么=]?

抱歉,这个问题太广泛了。我是 Python 的新手,这些例子让我很困惑。我非常感谢所有的帮助和时间。

Where does the value (200) for this specific self__maxspeed come from and why?

它来自__init__方法,当你调用Car()时调用该方法:

self.__maxspeed = 200

任何时候你创建一个 Car 它都会有一个 maxspeed 200 直到你将它设置为其他东西。

And the output of car_a.setMaxSpeed(320) is 320. So the same question here with 320.

这是 setMaxSpeed 函数:

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

如您所见,它会将您传递的任何内容作为参数 (320) 并为其设置 self.__maxspeed。没什么太神秘的。 Car 现在的 maxspeed 为 320,除非您将其设置为其他值。

lastly, what's the function of __maxspeed = 0 and __name = ""

它们没有任何作用。也就是说,您的代码从不使用它们做任何事情,所以它们的存在是错误的,或者您有一些其他代码可以对它们执行某些操作,但是根据您提供的代码,它们是无用的,您可以删除他们没有任何不良影响。

__init__() 每次创建任何对象时都会调用。

创建对象后,自动调用__init__()

在这种情况下,__init__() 正在初始化 __maxspeed 的值为 200 。然后,您使用 drive() 函数 .

打印了 __maxspeed 的值(即 200

稍后,您使用 320 作为值调用了 setMaxSpeed()。在这个函数内部,它将 320 分配给该对象的 __maxspeed 变量,该对象的初始值是 200

现在,您再次调用了 drive() 函数来打印 __maxspeed 的值,现在是 320 。因此,打印 320