# 在python中用双下划线,开头的方式将属性隐藏起来(设置成私有的)
# 但其实这只是一种变形操作,而且仅仅在类定义阶段会发生变形
# 类中所有双下划线开头的如__x都会在类定义的时候自动形成:_类名__x的形式。
class A:__N = 0# 类的属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如__N 会变成_A__Ndef __init__(self):self.__X = 10# self._A__Xdef __foo(self): # _A__fooprint('from A')def bar(self):self.__foo() # 只有在类的内部才可以通过__foo的形式访问到print(self.__N)
#A._A__是可以访问到的
# 这种,在外部是无法通过__x这个名字访问到的
a = A()
a.bar()
# print(a.__N)
print(a._A__N)
print(a.__dict__)a.__Y = 1
print(a.__dict__)# 在继承中父类如果不想让子类覆盖自己的方法,可以将方法定义
# 为私有的
class A:def fa(self):print('from A')def test(self):self.fa()
class B(A):def fa(self):print('from B')
b = B()
b.test()# 将fa定义成私有的即__fa
class A:def __fa(self):print('from A')def test(self):self.__fa()print(self.__fa)
class B(A):def __fa(self):print('from B')
b = B()
b.test()
# 我们可以来看一下执行过程,执行test-此时self为b对象-寻找__fa方法(前面我们说过,__fa会变成_A.__fa)-
# 首先咋B类中找,没有找到,-然后在父类A中寻找-执行# 封装的真谛在于明确地区分内外,封装的属性可以直接在内部使用,而不能在外部直接使用,然而定义
# 属性的目的终归是要用,外部想要用类隐藏的属性,需要我们为其开辟接口,
# 1,封装数据,将数据隐藏起来不是目的,隐藏起来然后提供操作该数据的接口,然后我们可以在
#   接口上附加对返数据操作的限制,以此完成对数据属性的严格控制
#       类比于电脑上的各种配件,就是被封装的数据,我们可以通过操作来改变电脑硬件的配置,
#       例如我们要加一块内存条,只需要知道接口,频率等参数,而不用知道内存条是什么材质的,
#       也不用知道内存条内部颗粒的构成
class Teacher:def __init__(self,name,age):self.__name = nameself.__age = ageself.set_info(name,age)def tell_info(self):print('name:%s,age:%s' %(self.__name,self.__age))def set_info(self,name,age):if not isinstance(name,str):raise TypeError("姓名必须是字符串类型")if not isinstance(age,int):raise TypeError("年龄必须是整数类型")self.__name = nameself.__age = age
t = Teacher('wang',21)
t.tell_info()
t.set_info('cong',21)
t.tell_info()
# 2,封装方法:目的是隔离复杂度
#   就像我们玩电脑一样,我们不需要知道电脑的工作原理,只需要知道他是怎么用的就可以了

转载于:https://www.cnblogs.com/cong12586/p/11366512.html

python基础--面向对象之封装相关推荐

  1. python基础—面向对象

    python基础-面向对象 面向对象 面向过程VS面向对象 类和实例 实例变量和类变量 类的方法 实例方法 静态方法 类方法 面向对象的组合用法 封装.继承和多态 封装 继承 派生 方法的重写 继承注 ...

  2. python基础——面向对象的程序设计

    python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  3. Python之面向对象(封装、继承、多态)

    目录 1.Java与Python中面向对象的区别 2.封装 3.继承[在Python中,所有类默认继承object类] 4.多态 1.Java与Python中面向对象的区别 该篇文章适合掌握Java面 ...

  4. [python基础] 面向对象——封装,继承

    面向对象 一.面向对象的基础知识 二.类和面向对象 三.封装 四.继承 (1).基本使用方法 (2).链表相加 (3).多继承 (4).私有属性与私有方法 一.面向对象的基础知识 1.面向对象 定义: ...

  5. 【Python】面向对象,封装

    封装来了:封装是啥?封装就好像把你需要的东西装到盒子里然后用封口胶把空封起来.照这种逻辑看,封装="隐藏". 哪在Python中怎么看出来隐藏呢? 在Python中用双下划线开头的 ...

  6. 学Python基础面向对象看这一篇文章就够了【全网首推】

    目录 面相对象基础语法 目标 01. dir 内置函数(知道) 02. 定义简单的类(只包含方法) 2.1 定义只包含方法的类 2.2 创建对象 2.3 第一个面向对象程序 03. 方法中的 self ...

  7. python基础 面向对象编程

    目录 面向对象编程 1.什么是面向对象编程? 面向过程编程思想 面向对象编程思想 2.什么是类?如何定义. 类: 对象 3.如何产生对象? 调用类时的事件: 4.对象属性的查找顺序: 5.类内部的函数 ...

  8. python基础----面向对象的程序设计(五个阶段、对小白的忠告、关于OOP常用术语)、类、对象...

    一.面向对象的软件开发有如下几个阶段                                              1.面向对象分析(object oriented analysis ,O ...

  9. Python基础-------面向对象二

    目录 一.封装 二.property装饰器 三.继承 四.多继承 五.方法的重写 super方法 一.封装 什么是封装 在日常中封装指的是将我们的物品包裹起来,不让看到其内部,具有保护的功能.在程序设 ...

  10. Python基础-面向对象编程

    本文完全转载自廖雪峰大神的教程: 面向对象编程 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数 ...

最新文章

  1. Error:Execution failed for task ':app:dexDebug'. com.android.ide.common.process.ProcessException
  2. python 序列化函数_python – 如何序列化sympy lambdified函数?
  3. 带给你灵感的20个漂亮的单页网站设计作品
  4. VS2010 加入OpenCV 提示 0xc000007b 的错误
  5. Python实现模板
  6. lisp中怎样调取图形_越玩越聪明的图形思维游戏
  7. ZooKeeper的十二连问,你顶得了嘛?
  8. [原]tornado源码分析系列(五)[HTTPServer 层]
  9. Docker进阶学习(容器数据卷、安装Mysql、DockerFile )
  10. java外文文库_java外文文献毕业设计
  11. mybatis的selectOne分享
  12. 2019 Multi-University Training Contest 6 1005 Snowy Smile —— 线段树
  13. 抖音快手初学者如何快速成长
  14. Android打开H5时提示“请在微信客户端打开”
  15. vs2010无法找到程序,安装Microsoft Visual Studio 2010 Service Pack 1 ,系统无法找到指定的对象
  16. ZCU102开发板的时钟系统
  17. 第1章 数据库应用系统开发方法
  18. JAVA编写 飞翔的小鸟
  19. DAE模型——阅读和理解COLLADA文档(1)
  20. [日推荐]『拉了吗』出门必备

热门文章

  1. java SimpleDateFormat类浅析
  2. 在vscode中使用ajax,vscode中的ajax片段,
  3. html5画电池状态,JavaScript里获取电池状态的方法
  4. java父类可以强转为子类吗_java父类可以强制转化成子类吗?
  5. jni问题总结:jni error (app bug): accessed stale local reference
  6. 春运来了,你的火车票备好了么?
  7. path和classpath的区别
  8. Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、
  9. unity创建一个简单对象的开销_SpringBoot第一篇:创建一个简单的SpringBoot
  10. html 边框轮廓,CSS Outline(轮廓)