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

2024-06-16 10:52:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我将介绍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新手,这些例子让我很困惑。我非常感谢所有的帮助和时间


Tags: 数据nameselfisdefdrivecarmax
2条回答

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。没什么神秘的。现在Carmaxspeed值为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被打印出来

相关问题 更多 >