Python面向对象 -- 多态

本套课在线学习视频(网盘地址,保存到网盘即可免费观看):

​​https://pan.quark.cn/s/2040f00d3205​​

在Python中,变量的访问控制可以通过不同的命名约定实现,包括系统变量、保护变量和私有变量。这些命名约定有助于保护数据安全,防止意外修改,并确保数据的完整性。

00:00 - 面向对象编程中的变量访问控制

变量访问控制类型

  1. 系统变量:通常以下划线开始和结束,不宜直接使用。
  2. 保护变量:以单下划线开头,用于限制对变量的访问。
  3. 私有变量:以双下划线开头,用于防止外部直接访问和修改。

示例:Person类

class Person:def __init__(self, name, age):self._name = name  # 保护变量self.__age = age   # 私有变量def get_age(self):return self.__agedef set_age(self, age):if 0 <= age <= 120:self.__age = ageelse:print("Invalid age. Please set a valid age.")person = Person("Alice", 30)
print(person._name)  # 可以访问保护变量
# print(person.__age)  # 无法直接访问私有变量
print(person.get_age())  # 通过方法访问私有变量
person.set_age(150)  # 尝试设置无效的年龄
person.set_age(25)   # 设置有效的年龄
print(person.get_age())

03:42 - 实现变量范围保护与私有变量的应用

变量范围保护

通过设置变量的取值范围以及将其转换为私有变量来保护数据安全。

示例:成绩管理

class Student:def __init__(self, name, score):self._name = name  # 保护变量self.__score = score  # 私有变量def get_score(self):return self.__scoredef set_score(self, score):if 0 <= score <= 100:self.__score = scoreelse:print("Invalid score. Please set a valid score.")student = Student("Bob", 85)
print(student.get_score())  # 通过方法访问私有变量
student.set_score(150)  # 尝试设置无效的成绩
student.set_score(90)   # 设置有效的成绩
print(student.get_score())

05:32 - Python中的私有变量及其访问控制

私有变量的访问控制

私有变量(以双下划线开头)用于防止外部直接访问和修改,保证数据的安全性和完整性。

示例:私有变量的访问

class Person:def __init__(self, name, age):self.__name = name  # 私有变量self.__age = age    # 私有变量def get_name(self):return self.__namedef get_age(self):return self.__ageperson = Person("Alice", 30)
# print(person.__name)  # 无法直接访问私有变量
print(person.get_name())  # 通过方法访问私有变量
print(person.get_age())   # 通过方法访问私有变量# 尝试修改私有变量
# person.__name = "Bob"  # 不会修改原有的私有变量,而是创建一个新的变量
# print(person.get_name())  # 仍然输出 "Alice"

最佳实践

尽量在类的内部访问私有变量,以确保数据的安全性和完整性。

class Person:def __init__(self, name, age):self.__name = name  # 私有变量self.__age = age    # 私有变量def get_name(self):return self.__namedef get_age(self):return self.__agedef set_name(self, name):self.__name = namedef set_age(self, age):if 0 <= age <= 120:self.__age = ageelse:print("Invalid age. Please set a valid age.")person = Person("Alice", 30)
print(person.get_name())  # 通过方法访问私有变量
print(person.get_age())   # 通过方法访问私有变量
person.set_name("Bob")
person.set_age(25)
print(person.get_name())  # 输出 "Bob"
print(person.get_age())   # 输出 25

总结

在Python面向对象编程中,通过使用系统变量、保护变量和私有变量,可以实现对变量的访问控制,保护数据安全,防止意外修改,并确保数据的完整性。私有变量(以双下划线开头)特别用于防止外部直接访问和修改,最佳实践是在类的内部访问私有变量,以确保数据的安全性和完整性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI绘画Stable Diffusion画全身图总是人脸扭曲?ADetailer插件实现一键解决!

大家好&#xff0c;我是向阳 你是否遇到过SD生成的人物脸部扭曲、甚至令人恶心的情况&#xff1f;也曾感到束手无策&#xff1f;别担心&#xff0c;这份教程专为你而来。 在使用SD生成人物全身照时&#xff0c;你可能经常发现人物的脸部会出现扭曲问题。这是因为人物面部像素…

d88888888

分析&#xff1a;v9999999999 vn输出n个n 先算出n的位数p 所以答案是nn*10的p次方n*10的2p次方.....n*10的&#xff08;n-1&#xff09;p次方 化简n*&#xff08;10的0次方10的p次方10的2p次方.....10的&#xff08;n-1&#xff09;p次方&#xff09; 后面为等比数列求和 …

【前端】IntersectionObserver 实现图片懒加载和无限滚动

【前端】IntersectionObserver 实现图片懒加载和无限滚动 在前端开发中&#xff0c;性能优化是一个重要的考量因素。随着现代网页和应用的复杂性增加&#xff0c;确保页面快速加载和流畅运行变得越来越重要。本文将介绍一种强大的工具——IntersectionObserver API&#xff0c…

golang 自旋

自旋 自旋锁的定义&#xff1a;当一个线程尝试去获取某一把锁的时候&#xff0c;如果这个锁此时已经被别人获取(占用)&#xff0c;那么此线程就无法获取到这把锁&#xff0c;该线程将会等待&#xff0c;间隔一段时间后会再次尝试获取。这种采用循环加锁 -> 等待的机制被称为…

力扣2488.统计中位数为 K 的子数组

力扣2488.统计中位数为 K 的子数组 等价转换 子数组为奇数 &#xff1a; 左小 右小 左大 右大 左小 – 左大 右大 – 右小 子数组为偶数 &#xff1a; 左小 右小 左大 右大 – 1 左小 – 左大 右大 – 右小 - 1提示中说明k为两数中左边那个 先从k的下标pos开始往左逆序…

LabVIEW新能源汽车电池性能测试系统

新能源汽车的核心部件之一是电池&#xff0c;其性能直接关系到整车的续航里程、安全性和寿命。为了确保电池的性能和可靠性&#xff0c;测试是必不可少的环节。本文介绍了一种基于LabVIEW的新能源汽车电池性能测试系统&#xff0c;通过LabVIEW与数据采集设备的无缝集成&#xf…

Unity 实现UGUI 简单拖拽吸附

获取鼠标当前点击的UI if(RectTransformUtility.RectangleContainsScreenPoint(rectTransform, Input.mousePosition)) {return rectTransform.gameObject; } 拖拽 在Update 中根据鼠标位置实时更新拖拽的图片位置。 itemDrag.transform.position Input.mousePosition; …

秒拿AI模型API Key!Chat2DB AI模型切换实用秘籍

智谱AI&#xff08;ZhiPu AI&#xff09; 智谱 AI 是由清华大学计算机系技术成果转化而来的公司&#xff0c;致力于打造新一代认知智能通用模型。 1.申请调用权限 智谱AI开放平台网址&#xff1a;https://open.bigmodel.cn/ 点击开始使用&#xff0c;进行登录/注册。 智谱A…

The Sandbox 创作者的幕后采访: 了解创作者的内心世界

我们采访了一些在 "创作者挑战" 中脱颖而出的顶尖创作者&#xff0c;探讨他们成功的秘诀以及在创造玩家喜爱的体验方面的心得。 The Sandbox 创作者挑战涌现出许多才华横溢的创作者&#xff0c;他们在游戏制作机制上的创新和突破引起了 The Sandbox 社区的广泛关注。…

大白菜U盘启动工具

大白菜如何u盘启动进winpe装系统大白菜是一款非常实用的U盘启动盘制作工具&#xff0c;可以帮助用户快速地将U盘制作成启动盘&#xff0c;从而方便地进行系统安装、维护和修复等操作。官方网站&#xff1a; 大白菜u盘启动盘制作工具_大白菜u盘装系统_大白菜pe_大白菜官网-首页…

为什么缠中说禅要选择08年“假死”跑路?

在缠中说禅的信徒圈内&#xff0c;流传着创始人李彪于2008年逝世的说法&#xff0c;这一事件常被描绘成一种悲壮的牺牲&#xff0c;仿佛是为了其理念与信徒们的福祉鞠躬尽瘁。然而&#xff0c;这一“逝世”既未经公开证实&#xff0c;也与李彪生前构建的高大名声形成了某种讽刺…

Spring AI 1.0.0 新变化,从 0.8.1 如何升级

Spring AI 1.0.0-M1 版本已经发布&#xff0c;距离 1.0.0 正式版又更近了一步。同时这也意味着&#xff0c;Spring AI 1.0.0 的 API 已经基本确定&#xff0c;不会发生大的改动。这里介绍一下&#xff0c;相对于上一个发布版本 0.8.1&#xff0c;Spring AI 1.0.0 的一些重要的变…

轻松跨越国界:使用WildCard畅享全球AI服务

大家好&#xff0c;现在AI技术已经深入到我们的日常生活中。然而&#xff0c;许多朋友仍然难以获取优质的AI工具和应用。那么&#xff0c;如何才能使用像ChatGPT这样的AI服务呢&#xff1f; 今天我为大家介绍一个“一劳永逸”的解决方案&#xff0c;它就是我们的主角——WildC…

HDU 1506 Largest Rectangle in a Histogram (DP或单调栈+笛卡尔树)

传送门 题目大意&#xff1a; 有N条的长条状的矩形&#xff0c;宽度都为1&#xff0c;第i条高度为Hi&#xff0c;相邻的竖立在x轴上&#xff0c;求最大的子矩形面积 DP思路及代码 求出当前点能够到达的最左边和最右边的位置&#xff0c;答案就是&#xff08;最右边-最左边&…

阿里云 ECS 服务器的安全组设置

阿里云 ECS 服务器的安全组设置 缘由安全组多个安全组各司其职一些常见的IP段百度 IP 段华为云 IP 段搜狗蜘蛛 IP 段阿里云 IP 段 。。。 缘由 最近公司规模缩减&#xff0c;原有的托管在 IDC 机房的服务器&#xff0c;都被处理掉了&#xff0c;所有代码都迁移到了阿里云的云服…

大模型学习笔记2【大模型】

文章目录 学习内容1.选择基座模型2.验证3.微调4.训练数据5.Instruction Tuning6.训练7.测试8.部署 学习内容 介绍流程 1.选择基座模型 基座模型对结果比较重要&#xff0c;一般选择的流程&#xff1a;首先关注整体性能&#xff08;打榜&#xff09;&#xff0c;其次关注所需…

腾讯云函数部署环境[使用函数URL]

使用函数URL 之前使用的是网关API,最近腾讯云的网关API说要关闭了,所以没有办法这里改成函数URL,使用后发现只要不是在浏览器直接访问的情况,函数URL都可以满足! 这里结合腾讯云函数node.js返回自动带反斜杠这篇文章来做说明,比如这里的URL如下: 结合文章腾讯云函数node.js返…

数组与 ArrayList 的区别是什么?

在Java中&#xff0c;数组和ArrayList都是非常常见的数据结构&#xff0c;但它们在使用场景、特点和功能上各有千秋。 理解它们的不同&#xff0c;对于初级Java工程师来说&#xff0c;是提升编程技能的一个重要环节。 下面&#xff0c;我将以一种简单明了的方式&#xff0c;对…

T113基于评估板SDK配置PD引脚异常

使用PD0/PD1/PD2作为IO输入时,发现输入检测到的值异常,断开输入的信号,直接示波器打IO口,还能发现波形信号,猜测该引脚存在引脚复用情况。 原因 这三个引脚在默认系统是作为显示相关引脚功能。 解决方法 1 ) Uboot修改

99. 岛屿数量

题目描述&#xff1a;给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可以假设矩阵外均被水包围。 输入描述&#xff1a…