python之封装及私有方法
目录
封装:提高程序的安全性
- 将属性和方法包装到类对象中,在方法内部对属性进行操作,在类对象外部调用方法,使得程序更加简洁
- 在python中,如果该属性不希望在类对象外部被访问,前边可以加两个“_”
封装
简洁
先定义一个类
class Student:
def __init__(self, name):
self.name = name
def eat(self):
print(self.name + '在打蜗牛')

我们在编译器旁边可以看到一个减号,点击这个减号可以让我们的类中的对象都收录起来

然后我们来创建这个类的对象
当我们输入这个'.'的时候就可以看到这个类中的方法了

然后我们使用这些方法
sws_1 = Student('慢蜗牛')
sws_1.eat()
print(sws_1.name)
结果如下:
慢蜗牛在打蜗牛
慢蜗牛
那么这个就是我们的封装了
私有方法
在python中,如果该属性不希望在类对象外部被访问,前边可以加两个“_”
class Student:
def __init__(self, name, age):
self.name = name
self.__age = age # 不想被别人知道年龄,所以加__进行保密操作
def show(self):
print(self.name, self.__age)
sws_1 = Student('慢蜗牛', 20)
sws_1.show()
然后我们在类的外部使用name和age看看
# 在类的外部使用name与age看看
print(sws_1.name)
print(sws_1.__age)
结果如下:
慢蜗牛 20
慢蜗牛
Traceback (most recent call last):
File "D:\pythonProject\main.py", line 15, in <module>
print(sws_1.__age)
AttributeError: 'Student' object has no attribute '__age'
我们可以看到,报错显示这里Student类中没有__age这个属性
但是这个加两个'_'的操作其实是可以被使用的,我们这里使用dir()函数,如下:
print(dir(sws_1))
#结果如下
['_Student__age', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'show']
我们可以看到sws_1中拥有的属性和方法,这个时候可以看到第一个属性'_Student__age'
这个时候我们就可以使用这个来进行访问了
print(sws_1._Student__age)
#结果如下
20
这个时候就有人要问了,既然都可以访问,那我们封装岂不是多余的操作吗
其实这就要看我们程序员的自觉性了,看到两个下划线的属性就不要去访问了
因为主人不希望我们去访问,但是这是靠自觉的啦
其实世界上各种加密算法都是可以被破解的,一切都靠自觉而已
python之封装及私有方法的更多相关文章
- 如何访问python类中的私有方法
在python中,不像c#/java类语言,支持类的私有方法,这点有点像objc,虽然objc可以通过扩展extension来实现,但源于objc的运行时特性,我们还是可以通过非常手段来进行访问的.不 ...
- python类中的私有方法
假设有如下一个python类: class Foo(object): def __a(self): print "Bet you can't see me..." def bar( ...
- python appium 封装获取toast方法
获取toast text封装,传入toast 部分文本,返回全部文本 def get_toast_text(self,text): try: toast_loc = (By.XPATH, " ...
- Python类中的 私有变量和私有方法
默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...
- python面向对象-封装-property-接口-抽象-鸭子类型-03
封装 什么是封装: # 将复杂的丑陋的隐私的细节隐藏到内部,对外提供简单的使用接口 或 # 对外隐藏内部实现细节,并提供访问的接口 为什么需要封装 1.为了保证关键数据的安全性 2.对外部隐藏内部的实 ...
- junit测试延伸--私有方法测试
关于junit测试的延伸,这里有类概念级别的测试,继承类的测试,接口的测试,抽象类的测试,关于这些类级别的测试,这里我就不做多的赘述了. 关于上面的几个测试就是说,我们不应该单纯的去测试类中的一些方法 ...
- python中类的定义、实例化、封装以及私有变量/方法
1. 定义类 python中定义一个类的格式如下: class MyClass(object): def __init__(self,data1,data2): self.__data1=data1 ...
- Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法
一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...
- Python面向对象之私有属性和私有方法
01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私有方法 就是 对象 ...
- Python中的私有属性私有方法、类属性类方法以及单例设计模式
私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法.在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线) 公有方法可以通过对象名直接调用,私有方法不能通过对象名直接调用,只 ...
随机推荐
- Mysql高级5-SQL优化
一.插入数据优化 1.1 批量插入 如果有多条数据需要同时插入,不要每次插入一条,然后分多次插入,因为每执行一次插入的操作,都要进行数据库的连接,多个操作就会连接多次,而一次批量操作只需要连接1次 1 ...
- Spring Boot Starter 剖析与实践
引言 对于 Java 开发人员来说,Spring 框架几乎是必不可少的.它是一个广泛用于开发企业应用程序的开源轻量级框架.近几年,Spring Boot 在传统 Spring 框架的基础上应运而生,不 ...
- 【pytorch】ResNet源码解读和基于迁移学习的实战
"工欲善其事,必先利其器",掌握ResNet网络有必要先了解其原理和源码.本文分别从原理.源码.运用三个方面出发行文,先对ResNet原理进行阐述,然后对pytorch中的源码进行 ...
- U268603 I Hate This Tree 题解
传送门 一道纯粹的码力 + 卡常题. 前置 矩阵乘法,线段树. 分析 线段树存矩阵. 构造迭代矩阵: \[\begin{pmatrix}f_i&f_{i-1}\end{pmatrix}\tim ...
- LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗
️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...
- Ionic3 与Electron制作桌面应用
Ionic3 与Electron制作桌面应用 原文:https://medium.com/@LohaniDamodar/lets-make-desktop-application-with-ionic ...
- 小札 Combinatorics 2
对于 Newton Expansion,式子本身的证明其实无甚可翻新的花样,但是题还是很有意思的.比如 codeforces - 1332E Height All the Same 这个. 首先给出几 ...
- CocoaPods 在iOS开发中养活了这么多项目,它到底是个啥?
对于iOS开发者而言,CocoaPods并不陌生,通过pod相关的命令操作,就可以很方便的将项目中用到的三方依赖库资源集成到项目环境中,大大的提升了开发的效率.CocoaPods作为iOS项目的包管理 ...
- FreeSWITCH容器化问题之rtp端口占用
操作系统 :CentOS 7.6_x64.debian 11 (bullseye,docker) FreeSWITCH版本 :1.10.9 Docker版本:23.0.6 FreeSWITCH容器化带 ...
- vue2中使用antv/G6节点内容可滚动的ER图
先举一个栗子: 效果链接:https://code.juejin.cn/pen/7226264955824930816 如果不会请移步到官网的栗子,请点击查看 狠人话不多,直接给大家上代码: 整体代码 ...