python - 通过数据隐藏进行封装在 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
and的功能是__nane = ""
什么?
很抱歉提出了广泛的问题。我是 Python 新手,这些例子让我很困惑。我非常感谢所有的帮助和时间。
解决方案
这个特定的 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
为它。没什么太神秘的。现在Car
将有maxspeed
320 的值,直到您将其设置为其他值。
最后,__maxspeed = 0 和 __name = "" 的作用是什么
它们没有任何功能。也就是说,您的代码从不将它们用于任何事情,因此它们的存在是错误的,或者您有一些其他代码可以对它们执行某些操作,但是根据您提供的代码,它们是无用的,您可以删除他们没有不良影响。
推荐阅读
- c# - 来自渲染纹理(非主相机)的屏幕截图以完全适合精灵(在 3D 空间中) - Unity
- apache-spark - 从 pyspark df 的数组列中的第一次出现直到最后一个值
- mysql - MySQL 嵌套 SELECT 查询运行时间过长
- python - 如何找到不同类别之间的最大点(计数排序)
- ios - 以排序方式插入并在 Swift 中获取索引
- node.js - 从Kafka主题读取消息然后关闭的正确方法
- javascript - 如何使用 Node JS 将 JSON 数据转换为表格并存储到 Postgres DB 中?
- node.js - Vue JS 不支持模块 @google-cloud/speech?
- java - 是否可以使用 LinearLayouts 在 ImageView 的左侧设置视图?
- javascript - 反应不在渲染上重新排序组件数组