Python类总结-封装(私有属性,方法)
封装基础
广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装
只让自己的对象能调用自己类中的方法
狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装)
把属性和方法都藏起来,不让你看见
类的特性
- 所有的私有,都是在变量左边加双下划线
- 所有的私有,都不能在类的外部使用
- 对象的私有属性
- 类的私有方法
- 类中私有的静态属性
class Person:
def __init__(self, name, password):
__key = 123 #静态私有属性
self.name = name
self.__password = password #在类的内部定义私有属性,会转换为_Person__password
def get_pwd(self): #通过公有方法get_pwd封装私有属性
return self.__password #返回__私有属性
def __set_pwd(self):#私有方法
print('set new password')
def changepwd(self):
self.__set_pwd()
#所有的私有,都是在变量左边加双下划线
#所有的私有,都不能在类的外部使用
#对象的私有属性
#类的私有方法
#类中私有的静态属性
alex = Person('alex', 'alex3714')
# print(alex.__password)#外部不可调用
print(alex.__dict__)
print(alex.get_pwd())#读取共用方法调取私有属性
使用set方法设置类变量
class Room:
def __init__(self,name, length, width):
self.__name = name
self.__length = length #私有属性
self.__width = width
def get_name(self):
return self.__name
def set_name(self,newName):#使用set方法可以规范变量的属性
if type(newName) is str and newName.isdigit() == False:#设置规范类的变量不可以是数字
self.__name = newName
else:
print('不合法的姓名')
return self.__name
def area(self):
return self.__length*self.__width #返回私有属性计算值
jin = Room('金老板', 2,1)
print(jin.area())
jin.name ='二哥'
print(jin.name)
jin.set_name('2') #传set_name数字则不修改
print(jin.get_name())
jin.set_name('东东') #传set_name字符则修改
print(jin.get_name())
>>>
2
二哥
不合法的姓名
金老板
东东
父类的私有属性可以被子类调用吗? 不可以
class Foo:
__key = '123' #变形为_Foo__Key
class Son(Foo):
print(Foo.__key) #变形为_Son__key何父类不相同
>>>
File "C:/Users/jwang2/PycharmProjects/PlayPy/Demo/S9-day25-封装.py", line 62, in Son
print(Foo.__key)
AttributeError: type object 'Foo' has no attribute '_Son__key'
总结-会用到私有概念的场景
- 隐藏起一个属性,不想让外部调用
- 保护这个属性,不想让这个属性随意改变
- 保护这个属性不被子类继承
Python类总结-封装(私有属性,方法)的更多相关文章
- Python类中的 私有变量和私有方法
默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...
- 孤荷凌寒自学python第二十三天python类的封装
孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...
- Python 静态方法、类方法和属性方法
Python 静态方法.类方法和属性方法 静态方法(staticmethod) staticmethod不与类或者对象绑定,类和实例对象都可以调用,没有自动传值效果,Python内置函数staticm ...
- Java通过反射机制修改类中的私有属性的值
首先创建一个类包含一个私有属性: class PrivateField{ private String username = "Jason"; } 通过反射机制修改username ...
- python类可以任意添加属性
python类可以任意添加属性 class A(object): def __init__(self): self.name = "zhangsan" self.age = 18 ...
- python 类和对象的属性
python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...
- CSIC_716_20191127【组合,封装、类的私有属性方法、property装饰器】
组合 what? 组合是指一个对象中,包含另一个或多个对象. why? 减少代码的冗余. How? 在类中加入其他类的对象,实现跨类对象之间的联动. 耦合度 软件设计要 高内聚 ...
- python 类的封装/property类型/和对象的绑定与非绑定方法
目录 类的封装 类的property特性 类与对象的绑定方法与非绑定方法 类的封装 封装: 就是打包,封起来,装起来,把你丢进袋子里,然后用绳子把袋子绑紧,你还能拿到袋子里的那个人吗? 1.隐藏属性和 ...
- 如何访问python类中的私有方法
在python中,不像c#/java类语言,支持类的私有方法,这点有点像objc,虽然objc可以通过扩展extension来实现,但源于objc的运行时特性,我们还是可以通过非常手段来进行访问的.不 ...
随机推荐
- swiper.js的使用
点击api文档地址, (1)图片轮播banner <script src="js/jquery-2.1.4.min.js"></script> <sc ...
- uva 1639 Candy (对数处理精度)
https://vjudge.net/problem/UVA-1639 有两个盒子各有n(n≤2*10 5 )个糖,每天随机选一个(概率分别为p,1-p),然后吃一颗糖. 直到有一天,打开盒子一看,没 ...
- UVA 1647 Computer Transformation
https://vjudge.net/problem/UVA-1647 题意: 开始有一个1,接下来每一步1变成01,0变成10 问n不之后00的个数 打表找规律 第3步之后: 如果第i步之后有x个字 ...
- JVM学习四:JVM之类加载器之初始化分析
在经过了前面的加载 和 连接分析之后,这一节我们进入重要的初始化分析过程: 一.认识初始化 初始化:这个似乎与上面的初始化为默认值有点矛盾,我们再看一遍:为累的静态变量赋予正确的初始值,上面是赋予默 ...
- AES Java加密 C#解密 (128-ECB加密模式)
在项目中遇到这么一个问题: java端需要把一些数据AES加密后传给C#端,找了好多资料,算是解决了,分享一下: import sun.misc.BASE64Decoder; import sun.m ...
- 说说asp.net中的异常处理和日志追踪
关于异常的处理想必大家都了解try{}catch(){}finally{},这里就不再讲了.通过在VS里的"调试"-"异常",在弹出的异常对话框里的Common ...
- [NOIP2003]栈 题解(卡特兰数)
[NOIP2003]栈 Description 宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n. 现在可以进行两种操作: 1.将一个数,从操作数序 ...
- 【译】msfvenom
原文链接:MSFvenom 1.使用MSFvenom命令行界面 msfvenom是Msfpayload和Msfencode的组合,将这两个工具集成在一个框架实例中. msfvenom的优点是: 一个单 ...
- MSSQL 基础知识002
---启用sa账号 1. 先使用一个windows账号登陆. 2.在数据库实例上面右键,属性,安全性,登录名,sa. 右键,属性. 常规,修改sa的密码. 状态,启用sa账号. 主键的作用: 1.唯一 ...
- JS设计模式——5.单体模式(用了这么久,竟全然不知!)
单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? 1.可以用它来划分命名空间(这个就是就是经常用的了) 2.利用分支技术来封装浏览器之间的差异(这个还真没用过,挺新鲜) 3.借 ...