python 进阶 【封装】 适合小白入门
面向对象的三大特性: 封装,继承,多态 是面向对象的三大特性
面向对象编程,是许多编程语言都支持的一种编程思想。
简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。
封装: 封装指的是把相关属性变量和方法封装在类里,比如把汽车相关属性和方法封装为汽车类这样就能在不同的项目里重用这个类。
#声明一个类 Car class Car:"""定义一个属性"""price = 0owner = ' '#构造一个方法 __init__def __init__(self,price,owner):self.price = priceself.owner = ownerprint('Owner is:' + self.owner)print('Owner is:' +str(self.price)) #实例化类并使用,并赋值给对象mycar myCar = Car(1000,'Lei Jun')
简单理解是:基于模板(类)去创建实体(对象)调用类Car 并赋值给一个对象 myCar 这就相当于创建了一个对象。
2.私有属性和私有方法
既然有共有的属性就会有私有的属性,私有属性和私有方法的设立之初呢? 是为了提高数据的安全,禁止外部
在类中,出于封装的考虑往往会把一些实现细节定义成私有属性,通过外部的实例是无法直接访问这些私有属性,如果外部实例需要访问私有属性,则必须通过类提供的get 和set 方法。
https://pan.baidu.com/s/1KCKkV13ymltq9CMXE3qxJA?pwd=1234
定义私有成员的方式非常简单,只需要:
私有成员变量:变量名以__开头(2个下划线)
私有成员方法:方法名以__开头(2个下划线)
即可完成私有成员的设置
class Phone:imet = Noneproducer = None#私有属性__current_voltage = None#私有方法def __keep_single_core(self):print("让CPU以单核模式运行以节省电量") Phone = Phone() #创建对象
之前提到,私有属性和由类定义的私有方法也无法在外部被调用,而封装特性的精髓在于合理地定义类的私有属性和私有方法,存在私有成员变量和私有成员方法的核心作用是屏蔽内类内部的实现细节。
通过类对象直接调用私有方法,这是不允许的。
class Phone:imet = Noneproducer = None#私有属性__current_voltage = Nonedef call_by_5g(self):self.__keep_single_core()#私有方法def __keep_single_core(self):print("让CPU以单核模式运行以节省电量") Phone = Phone() #创建对象 Phone.__keep_single_core() #正确的用法
虽然说,私有成员无法被类对象使用,但是可以被其它的成员使用:
例如:
class Phone:imet = Noneproducer = None#私有属性__current_voltage = None#下面 call_by_5g 是一个内部的成员方法def call_by_5g(self): self.__keep_single_core()#私有方法def __keep_single_core(self):print("让CPU以单核模式运行以节省电量") Phone = Phone() #创建对象 #通过内部的成员方法去调用私有方法 Phone.call_by_5g() #正确的用法
如果你应要从类对象外部去调用私有属性和私有方法,给你提供几点建议(用法的取舍是保留意见的,但可根据项目情况做特殊处理)
方式一:文章开头讲过,可以通过类提供的 get 和 set 方法进行读取和修改类的私有属性:
# coding = utf -8 class Car:#私有属性__Insured = False #5#针对私有属性的get和set 方法def get_Insured(self): # 8 8的方法是返回 5的值 Falsereturn self.__Insureddef set_Insurd(self,Insured): #3self.__Insured = Insured #4 会调用 私有属性5 False = False #实例化对象 myCar = Car() #1 myCar.set_Insured(False) #2 向第3中的 Insured 传入参数 False myCar.__Insured=True #6 执行6时 不会去调用 5 修改 __Insured 的值为True print(myCar.get_Insured()) # 输出Flase #7 7会调用 8 并输出8 返回结果 print(myCar.__Insured) # 输出True # 9 输出6的结果 True #给私有属性重命名 myCar._Car__Insured = True #10通过给私有方法重命名的方式来访问5并且将5的False修改为 True #get方法访问私有属性 print(myCar.get_Insured()) # 11 输出步骤10的结果True
执行步骤:如 # 1.... # 2 ...... 步骤6 myCar.__Insured=True 本来应该去调用步骤5的__Insured = False,并且将 False 修改为 True,但事实并没有,我也不知道它调用了什么? 八嘎呀路
方式二:在python中通过给私有方法重新命名也可以实现成功调用私有方法。
私有方法重命名的方式和私有属性的一致,都是_类名+私有方法名
class Phone:imet = Noneproducer = None#私有属性__current_voltage = Nonereturn def call_by_5g(self):self.__keep_single_core()#私有方法def __keep_single_core(self):print("让CPU以单核模式运行以节省电量") Phone = Phone() #创建对象 Phone._Phone__keep_single_core() #不推荐的用法 因为会破坏类的封装性
总结 : 这一块不太简单,哪里不懂,请留言收到后第一时间回复
python 进阶 【封装】 适合小白入门相关推荐
- 切分数据集(train_test_split),思路分享及手打代码和介绍sklearn中train_test_split,适合小白入门
本篇博客介绍train_test_split,步骤1-4是自己手打代码和思路分享,步骤5介绍如何使用sklearn中的train_test_split,步骤3有介绍随机种子哦,简单易懂,适合小白入门 ...
- 推荐:适合小白入门的Asp.Net Core 开源学习手册
前言 推荐一个入门级的.NET Core开源项目,非常适合新手入门学习.NET Core. 开源地址: https://github.com/windsting/little-aspnetcore-b ...
- Python多线程编程(详细:适合小白入门)
目录 前言 一.进程 1.多任务 2.进程 3.多进程完成多任务 3.1进程的创建步骤 3.2通过进程类创建进程对象 3.3创建进程和启动的代码 4. 进程执行带有参数的任务 5.获取进程编号 6.进 ...
- python爬虫 小白轻松从0到1_如何从0到1,学习Python的流程【小白入门】
Hello World! 写下Hello World是你在学任何编程语言时做的第一件事,除了让你对第一次代码运行感到兴奋,它也会帮你检测目前运行环境是否正常. 我们第一个运行的程序! 重点 可读性-- ...
- 赶上年底最后一趟末班车——Python编程基础之小白入门
了解编程语言 正如人与人之间的沟通需要语言,人与计算机之间的沟通,也需要语言,连接人与计算机沟通的桥梁就是编程语言.任何编程语言只要用来开发程序,都怀揣着同一使命--"为人类干活" ...
- 零基础入门微信小程序,真真真·零基础,一个完全的小白写出来的才适合小白入门,踩坑日记
进入微信小程序官网选择适合自己的平台及工具,这里我选择开发版 工具下载完成,安装 以下就是初始界面了 点击+号新建一个项目 选择不适用模板,然后填写小程序工程名,路径,ID(可先不填写) 创建即可 小 ...
- 手机安装python的步骤_小白入门:Python安装的10个步骤,极其细致!!
(2)3.X.X需要下载windows XXX executable installer 4. 下载完成后打开 (1)勾选Add Python 3.6 to PATH是把Python的安装路径添加到系 ...
- Python爬虫天气预报(小白入门)
这次要爬的站点是这个:http://www.weather.com.cn/forecast/ 要求是把你所在城市过去一年的历史数据爬出来. 分析网站 首先来到目标数据的网页 http://www.we ...
- 适合小白入门的随机森林介绍
作者:Abner,王宇 一.随机森林简介 随机森林是机器学习中的一种常用方法,而随机森林背后的思想,更是与群体智慧,甚至"看不见的手"相互映照. 上世纪八十年代Breiman等人发 ...
最新文章
- 长春理工大学c语言实验题库,长春理工大学首届趣味心理知识竞赛初赛题库.doc...
- 基于 vue + zhengAdmin 的一套后台模板
- 技术博客2013年2月份头条记录
- C中文件的输入输出与C++的文件流
- 区分内存、外存、主存、辅存等
- TiDB RC1 Release
- PWA--未来式app
- linux运行关关采集器,杰奇远程采集教程linux下远程采集
- pdf增强锐化软件_分享一波图像处理软件神器,绝对牛皮!!
- ACM入门之新手入门
- google 新功能 快讯
- InputStream输入流七牛上传图片
- 一文读懂什么是云服务器,和本地服务器的区别,云服务的用途,华为云服务器的获取
- 微博、微信上的假消息害苦了哥
- 瑞萨RH850/F1L-片上资源分配(Flash,RAM,外设资源)
- Intel VMD技术和SPDK VMD驱动模块介绍及使用
- linux魔兽世界黑屏,在UBUNTU下玩魔兽世界并不轻松。许多问题无法自己解决,请有兴趣的...
- 程序员必备git客户端PortableGit-2.34.0-64-bit.7z.exe
- javascript图片加载---加载大图的一个解决方案
- Pygame:飞机大战7(详细解读)