# 在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. vue 设置当前页背景色

    beforeRouteEnter(to, from, next) { // 添加背景色 document.querySelector('body').setAttribute('style', 'ba ...

  2. Spring、SpringMVC和Springboot的区别

    spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc. spring mvc 是只是spring 处理web层请求的一个模 ...

  3. 手动升级 Confluence - 规划你的升级

    1. 确定你的升级路径 使用下面的表格来确定最佳的升级路径来让你的Confluence 从当前版本升级到最新的 Confluence 版本. 你的版本 推荐升级到 Confluence 的升级路径 2 ...

  4. Linux命令-文件管理(一)

    Linux命令-文件管理(一) 1.命令:cat cat命令用于把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案) 使用权限:所有使用者 语法格式:cat [-AbeEn ...

  5. idea maven projects 工具栏按钮的作用

    1.Execute Maven Goal  弹出可执行的 Maven 命令的输入框.有些情况下我们需要通过书写某些执行命令来构建项目,就可以通过此按钮 2.Toggle Offline Mode 英文 ...

  6. 「HAOI2016」食物链

    题目链接 解题思路 简单的DAG上DP即可. 参考程序 #include <bits/stdc++.h> using namespace std; const int Maxn = 100 ...

  7. APUE学习之进程控制 - fork 与 vfork

    最后编辑: 2019-11-6 版本: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11) 一.进程标识 每一个进程都有一个唯一的非 ...

  8. phpstorm 设置ftp自动保存服务器 (原)

    打开PHPstorm,依次  tools -  deployment  --  configuration 配置ftp或者sftp地址用户名密码等 端口号 要不就是 21 要不就是 22 , 22不行 ...

  9. JavaWeb_(request和response)用户登录注册模板_基础版

    用户登录注册模板进阶版 传送门 用户登录注册模板基础版 登录:当用户登录成功时,跳转到personCenter.jsp,当用户登录失败时,跳转到login.jsp并给出提示 注册:当用户注册成功时,跳 ...

  10. springBoot 整合 mybatis 项目实战

    二.springBoot 整合 mybatis 项目实战   前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用 ...