通过数据隐藏进行的封装在Python中的工作原理如何?初学者

问题描述 投票:0回答:2

我将介绍有关类多态性的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的新手,这些示例使我感到困惑。我非常感谢所有帮助和时间。

python polymorphism encapsulation
2个回答
0
投票

此特定self__maxspeed的值(200)来自何处?为什么?

它来自__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。没什么太神秘的。现在,Carmaxspeed将为320,直到您将其设置为其他值。

最后,__ maxspeed = 0和__name =“”的作用是什么

它们没有任何功能。也就是说,您的代码从不将它们用于任何用途,因此,要么它们的存在是一个错误,要么您有一些其他代码对它们有所作为,但是根据您提供的代码,它们是无用的,您可以删除他们没有不良影响。


0
投票

[__init__()每当创建任何对象时都被调用。

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

在这种情况下,__init__()正在初始化值为[[200的__maxspeed。然后,使用__maxspeed功能打印了drive()的值(为200)。

后来,您以

320

作为值调用了setMaxSpeed()。在此函数内部,它将320赋给该对象的__maxspeed变量,该变量的初始值为200现在,您再次调用drive()函数以打印__maxspeed的值,现在它是

320

。因此,将打印320
© www.soinside.com 2019 - 2024. All rights reserved.