# 在python中用双下划线,开头的方式将属性隐藏起来(设置成私有的)
# 但其实这只是一种变形操作,而且仅仅在类定义阶段会发生变形
# 类中所有双下划线开头的如__x都会在类定义的时候自动形成:_类名__x的形式。
class A:
__N = 0
# 类的属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如__N 会变成_A__N
def __init__(self):
self.__X = 10# self._A__X
def __foo(self): # _A__foo
print('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 = name
self.__age = age
self.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 = name
self.__age = age
t = Teacher('wang',21)
t.tell_info()
t.set_info('cong',21)
t.tell_info()
# 2,封装方法:目的是隔离复杂度
# 就像我们玩电脑一样,我们不需要知道电脑的工作原理,只需要知道他是怎么用的就可以了

python基础--面向对象之封装的更多相关文章

  1. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  2. Python 基础 面向对象之二 三大特性

    Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...

  3. python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)

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

  4. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  5. python基础——面向对象进阶

    python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...

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

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

  7. python(面向对象-类封装调用)

    一.面对对象思想 (1)大家肯定听过 Python 中”一切皆对象“的说法,但可能并不了解它的具体含义,只是在学习的时候听说 Python 是面向对象的编程语言,本节将向大家详细介绍 Python 面 ...

  8. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

  9. python之面向对象之封装

    今天我们终于进入了面向对象,今天做一下面向的封装的总结 #面向对象的封装 #这里定义了一个类,名称为Role,object是所有类的父类 class Role(object): #这里是定义实例的属性 ...

随机推荐

  1. 【洛谷P4173】残缺的字符串

    题目大意:给定一个文本串和一个模板串,串中含有通配符,求文本串中有多少个位置可以与文本串完全匹配. 题解:利用卷积求解字符串匹配问题. 通配符字符串匹配的数值表示为 \[\sum\limits_{i ...

  2. @AutoConfigureBefore

    @AutoConfigureBefore(Xxx.class)此注解用在类名上,标识在加载Xxx类前加载该配置类

  3. Python 正则表达式Ⅳ

    repl 参数是一个函数 以下实例中将字符串中的匹配的数字乘以 2: 执行输出结果为: re.compile 函数 compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象 ...

  4. python 数据库错误处理

    DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常: 异常 描述 Warning 当有严重警告时触发,例如插入数据是被截断等等.必须是 StandardError 的子类. Er ...

  5. TTTTTTTTTTT hdu 1520 Anniversary party 生日party 树形dp第一题

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. Poj 3057 未AC http://poj.org/showsource?solution_id=15175171

    <span style="font-size:18px;">#include <iostream> #include <cstdio> #inc ...

  7. 【LOJ2316】「NOIP2017」逛公园

    [题目链接] [点击打开链接] [题目概括] 对给定\(K\),起点\(1\)到终点\(n\)中对长度为\([L,L+K]\)的路径计数. \(L\)为\(1\)到\(n\)的最短路长度. [思路要点 ...

  8. [HG]子树问题 题解

    前言 模拟赛赛时SubtaskR3没开long long丢了20分. 题意简述 题目描述 对于一棵有根树(设其节点数为 \(n\) ,则节点编号从 \(1\) 至 \(n\) ),如果它满足所有非根节 ...

  9. openwrt boot 启动出现的问题

    一.boot启动出现JFFS2挂载文件系统错误 问题排查: 1.固件问题. 2.刷机,写进去不完整. 3.flash有问题. 二.openwrt 进入web页面出错 解决方法: 1.SSH进去,先恢复 ...

  10. java中的基本数据类型简谈

    在java里面有八大基本的数据类型,分别是 byte,short,char,int,long,float,double,boolean 然后需要说的就是几个特殊的基本数据类型的取值范围 先来说说byt ...