Python 编程基础 | 第五章-类与对象 | 5.4、访问控制

news/2024/11/15 0:47:32/

一、访问控制

为了保证类内部的某些属性或方法不被外部所访问,可以在属性或方法名前面添加单下划线_foo、双下划线__foo或者首尾加双下划线__ foo __,从而限制访问权限。

1、单下划线

以单下划线开头的表示protected(保护)类型的成员,只允许类本身或子类访问,但不能使用“ from module impor”语句导入。例如:创建一个Swan类,定义保护属性_neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出保护属性_neck_swan

class Swan:"""天鹅类"""_neck_swan = "天鹅脖子长"  # 创建私有属性def __init__(self):print("__init__():", Swan._neck_swan)my_swan = Swan()  # 创建Swan类对象
print("直接访问:", my_swan._neck_swan)  # 输出结果:直接访问: 天鹅脖子长
print("直接访问:", Swan._neck_swan)     # 输出结果:直接访问: 天鹅脖子长

从上面的运行结果中可以看出:保护属性可以通过实例名或类名访问

2、双下划线

双下划线表示private(私有)类型的成员,只允许定义该方法的类本身进行访问,不能通过类的实例进行访问,但是可以通过下面的方式进行访问

  • 类的实例名._类名__xxx
  • 类名._类名__xxx

例如:创建一个Swan类,定义保护类属性__neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出私有属性__neck_swan,代码如下:

class Swan:"""天鹅类"""__neck_swan = "天鹅脖子长"  # 创建私有属性def __init__(self):print("__init__():", Swan.__neck_swan)my_swan = Swan()  # 创建Swan类对象
print("直接访问:", my_swan._Swan__neck_swan)  # 输出结果:直接访问: 天鹅脖子长
print("直接访问:", Swan._Swan__neck_swan)     # 输出结果:直接访问: 天鹅脖子长

http://www.ppmy.cn/news/1143464.html

相关文章

​LeetCode解法汇总2578. 最小和分割

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一个正…

Python 樱花

Python实现樱花 效果图 (源码在下面) 源码: from turtle import * from random import * from math import *def tree(n, l):pd() # 下笔# 阴影效果t cos(radians(heading() 45)) / 8 0.25pencolor(t, t, t)pensize(n / 3)forward(l…

C++中指向成员的指针运算符(.* 和 ->*)用法说明

目录 一 MSDN中使用说明1.1 语法1.2 备注 二 一个使用案例 一 MSDN中使用说明 1.1 语法 expression .* expression //直接成员解除引用运算符 expression –>* expression //间接成员解除引用运算符 1.2 备注 C中指向成员的指针运算符(.* 和 ->*)…

R实现地图相关图形绘制

大家好,我是带我去滑雪! 地图相关图形绘制具有许多优点,这些优点使其在各种领域和应用中非常有用。例如:地图相关图形提供了一种直观的方式来可视化数据,使数据更容易理解和分析。通过地图,可以看到数据的空…

ThreeJS-3D教学七-交互

在threejs中想要选中一个物体,点击或者鼠标悬浮,又或者移动端的touch事件,核心都是通过new THREE.Raycaster完成的。这里用到了一个概念,即我们点击时的 屏幕坐标 转换为 three中的3D坐标。 先看效果图: 代码是&#…

TCP相关面试题

TCP相关面试题 题目1 介绍一下TCP三次握手的过程 介绍TCP三次握手应该从3个方面进行回答,分别是数据包名称,客户端与服务端的状态变化,数据包的序号变化。而不能只是简单回答发送的数据包名称。 TCP三次握手的过程如下: 从数据…

【深蓝学院】手写VIO第2章--IMU传感器--作业

这次作业坑很多,作业说明的不清楚,摸索了很长时间才将此次作业完成,在这里进行记录。 1. T1 1.1 题干 1.2 解答 1.2.1 法1,ros related方法 不知道为什么我的launch不了,在imu_utils目录下面建立build后&#xff0…

redis实战-实现用户签到UV统计

BitMap功能演示 我们针对签到功能完全可以通过mysql来完成,比如说以下这张表 用户一次签到,就是一条记录,假如有1000万用户,平均每人每年签到次数为10次,则这张表一年的数据量为 1亿条 每签到一次需要使用&#xff08…