Python3.x基础学习-类--封装
时间:2020-04-15
本文章向大家介绍Python3.x基础学习-类--封装,主要包括Python3.x基础学习-类--封装使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
封装特性
1 什么是封装:
总结: 隐藏对象的属性和方法实现细节,仅仅对外提供公共访问方式
目的:保护隐私
格式:__属性名=属性值
case1:
class Person: def __init__(self,name,age): self.name = name self.age = age def __str__(self): return "我叫{0},今年{1}岁".format(self.name,self.age) per = Person("johnson","25") print(per) print(per.name,per.age) per.age=-20 print(per) # 我叫johnson,今年25岁 # johnson 25 # 我叫johnson,今年-20岁
case2
class Person: def set_name(self,name): self.name = name def get_name(self): return self.name def set_age(self,age): if 0<age<100: self.age=age else: print('年龄不符合要求!') self.age=0 def get_age(self): return self.age def __str__(self): return "我叫{0},今年{1}岁".format(self.name,self.age) per = Person() per.set_name('Johnson') print(per.get_name()) per.set_age(25) print(per.get_age()) per.age=-10 print(per) # Johnson # 25 # 我叫Johnson,今年-10岁
case3
class Person: def set_name(self,name): self.__name = name def get_name(self): return self.__name def set_age(self,age): if 0<age<100: self.__age=age else: print('年龄不符合要求!') self.__age=0 def get_age(self): return self.__age def __str__(self): return "我叫{0},今年{1}岁".format(self.__name,self.__age) per = Person() per.set_name('Johnson') print(per.get_name()) per.set_age(25) print(per.get_age()) per.__age=-10 print(per) print(per.__age)
# Johnson
# 25
# 我叫Johnson,今年25岁
# -10
私有方法:在方法前添加__例如:__send_message()
私有方法作用:就是在开发的过程中保护核心代码
在类的外部不能使用(对象不能调用私有方法)
class A: def __test(self): print("--私有方法--") def test2(self): print('普通方法') a = A() # a.__test() #不能调用 a.test2()
# 普通方法
class Dog: def __init__(self): self.__baby_count=0 def birth(self): print('生了一个崽') self.__baby_count+=1 self.__holiday() def __holiday(self): print("休息了一个月产假") def __str__(self): return "孩子数量是{}".format(self.__baby_count) dog = Dog() dog.birth() print(dog) dog.baby_count=3 print(dog)
# 生了一个崽
# 休息了一个月产假
# 孩子数量是1
# 孩子数量是1
class Phone: def __phone(self): print("正在打电话") def platmoney(self,money): if money>0: self.__phone() else: print("欠费了,兄弟") phone = Phone() phone.platmoney(1) # 正在打电话
私有化封装后的限制
1.类中可以访问
2.类外/对象外不可以访问
3.子类/子类对象 不可以访问
注意事项
1.在python中实现的封装操作,不是通过权限控制而是通过改名(name mangling 改名策略)实现的,名字变了找不到而已
2.可以使用 __dict__可以查看属性(包括私有属性)的值,在类的内部使用的私有属性,python内部会自动进行转换成_类名__属性名。
在类的外部不能给对象添加私有属性,因为不能转换成_类名__属性名类型
class Person1: def set_name(self,name): self.__name = name def get_name(self): return self.__name def set_age(self,age): if 0<age<100: self.__age=age else: print('年龄不符合要求!') self.__age=0 def get_age(self): return self.__age def __str__(self): return "我叫{0},今年{1}岁".format(self.__name,self.__age) per = Person1() per.set_name("Mary") per.set_age(25) print(per) print(per.__dict__) per.__age = -10 print(per) print(per.__age) print(per.__dict__)
我叫Mary,今年25岁
# {'_Person1__name': 'Mary', '_Person1__age': 25}
# 我叫Mary,今年25岁
# -10
# {'_Person1__name': 'Mary', '_Person1__age': 25, '__age': -10}
修改私有属性 per._Person1__age = -10 print(per) print(per.__dict__) {'_Person1__name': 'Mary', '_Person1__age': 25, '__age': -10} 我叫Mary,今年-10岁 {'_Person1__name': 'Mary', '_Person1__age': -10, '__age': -10}
原文地址:https://www.cnblogs.com/johnsonbug/p/12706976.html
- css3动画从入门到精通
- ReactJs和React Native的那些事
- Linux学习-文件排序和FASTA文件操作
- Bash漏洞再次演进:缓冲区溢出导致远程任意命令执行
- Pandas,让Python像R一样处理数据,但快
- ViewPager 实现 Galler 效果, 中间大图显示,两边小图展示
- 最小生成树-Prim算法和Kruskal算法
- Bash漏洞批量检测工具与修复方案
- 组合模式
- 用Fiddler在Android上抓包(Http+https)
- Architecture Components ViewModel的控制。
- React Native之AppRegistry模块
- 揭秘:如何分分钟黑掉你的eBay账号
- C++初始化列表
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- HTML5-JS操作页面滚动条(禁止、隐藏、显示、不显示)
- 追根溯源MySQL,“你的表情”插入对了吗?
- 推荐官方开源 PInvoke 库 包含大量 win32 封装
- 这是什么重大发现!一个导致JVM物理内存消耗大的Bug
- 无语,我差点被面试官怼坏了,又给我问到MySQL索引
- 面试官虚晃一枪:项目中有用过锁吗?能解释一下什么是AQS?
- 实验四--数据库的安全性、完整性控制
- Servlet生命周期
- 制作的 dotnet tool 运行失败提示依赖缺失
- 撸了个多线程断点续传下载器,我从中学习到了这些知识
- 使用 IOC 控制反转和 DI 依赖注入的意义
- Servlet配置初始值,并获取初始值
- CSS 技巧一则 -- 不定宽溢出文本适配滚动
- 潘石屹用Python解决100个问题 | 最大公约数
- 我的天上传文件又出现问题了(超出大小限制)