1.面向对象的三大特性:封装性、继承性、多态性

封装:

封装使用的领悟:

1).生活层面:食品、快递、计算机、明星...

2).计算机层面:

①.模块、类、函数...

②.属性数据的封装与隐藏

权限修饰符的概念:

public(公共的,范围最大) protected(收保护的)default(默认,缺省) private(私有的,范围最小)

python语言没有以上这些关键字:

对于python的属性私有化使用:__来实现

在设计完类,外界创建对象通过.的形式访问(设置)属性,

可能会出现跟现实情况不符的混乱数据,那么我们就将属性的设置权没收(外界不能直接通过.调用属性),

在类的内部提供外界额外的访问方式(定义setter和getter方法),

并且在需要的时候,可以在函数的内部加入数据合法性的校验;

模板:

对于setter函数,命名:set属性名(首字母大写)

对于getter函数,命名:get属性名(首字母大写)

私有属性:__age

设置值(__age):

def setAge(self,age):

self.__age = age

获取值(__age):

def getAge(self):

return self.__age

演示封装性的使用--->属性的封装与隐藏(私有化)
class Person:
def __init__(self,name,age,money):
self.name=name
self.__age=age
self.__money=money '''
提供外界额外的访问方式:getter和setter操作
'''
#设置值操作
def setAge(self,age):
#对age的内容进行合法性的校验
if age<0 or age>130:
print('年龄赋值有误...')
raise Exception('年龄有误...')
else:
self.__age=age #获取值操作
def getAge(self):
return self.__age def setMoney(self,money):
#...
self.__money=money def getMoney(self):
return self.__money #实例化Person对象
p=Person('老王',30,30000)
# print(p.name,p.age,p.money)

对象实例化之后,可能会对属性进行再次的访问(赋值、获取值),

但是在外界直接通过对象.属性名的方式进行操作,很有可能造成数据与现实逻辑不符合的情况(脏数据),

我们是需要避免的,那么该怎么办呢?

我们就将对象访问属性的行为没收(限制),可以在需要的属性前定义__来实现私有化

之后可以提供外界额外的访问方式:一套getter和setter函数即可
p.age=-30
print(p.age)

以下操作并不是尝试修改私有属性,而且为对象动态添加属性的行为
p.__age=-30
print(p.__age)

__dict__属性:

作用:返回对象的属性名(键),属性值(value),以字典形式返回

从中我们可以看出,被所谓私有化的属性其实就是换了个名字(伪私有),

命名的规则:_类名__属性名,

虽然我们也是可以在外界去访问它,但是一般人都不这么干(帅的人)
print(p.__dict__)
p._Person_age=100
print(p.__dict__) p.setAge(-100)
print(p.getAge())
print(p.__dict__)
返回目录

python第四十三课——封装性的更多相关文章

  1. NeHe OpenGL教程 第四十三课:FreeType库

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. 孤荷凌寒自学python第四十三天python 的线程同步之Queue对象

     孤荷凌寒自学python第四十三天python的线程同步之Queue对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Queue对象是直接操作队列池的对象,队列中可以存放多种对象,当然也 ...

  3. Java核心技术第四章——1.封装性

    封装性(有时称为数据隐藏): 实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域值.程序仅通过对象的方法与对象的数据进行交互. 给对象赋予了"黑盒"的特征,提高了重用性 ...

  4. python第四十课——构造函数

    1.动态给对象添加属性: 在对象创建完毕后,单独为其添加需要的属性:可以理解为:私人定制 [注意]: 添加的属性只有此对象能够使用,别的对象如果用了,直接报错; 2.构造函数/构造方法/构造器: 格式 ...

  5. 第四十三课:jQuery插件化

    我们先来看一个最简单的例子: (function($){ $.fn.extend({     //把此插件添加到jQuery的原型上 pluginName:function(){   //插件的名字 ...

  6. 潭州课堂25班:Ph201805201 django 项目 第四十三课 后台 用户管理前后功能实现 (课堂笔记)

    用户的展示,编辑,删除, 把用户显示出来,用户名,员工(是,否), 超级用户(是, 否) 活跃状态,(非活跃示为删除) 在前台要显示该用户所属的用户组,在前台代码中是调用类的属性,所以在 user 的 ...

  7. python第四十三天--第三模块考核

    面向对象: 概念:类,实例化,对象,实例 属性: 公有属性:在类中定义 成员属性:在方法中定义 私有属性:在方法中使用 __属性  定义 限制外部访问 方法: 普通方法 类方法: @classmeth ...

  8. python第五十三课——time模块

    1.time.datatime.calendar模块的引入讲解(重视) Unix时间戳(timestamp):返回的是数值类型数据(float值), 概念:记录了从1970年00点00分00秒至今的秒 ...

  9. python第四十七课——类属性和函数属性

    4.类属性和对象属性 类属性:定义在class内,函数外 对象属性:定义在构造函数的内部 演示:类和对象的关系 --> 生命周期 [注意]类加载早,对象加载晚 --> 晚的可以调用早的,早 ...

随机推荐

  1. Docker实战-为镜像添加SSH服务

    1.基于docker commit命令创建 Docker提供了docker commit命令,支持用户提交自己对定制容器的修改,并生成新的镜像. 命令格式为:docker commit CONTAIN ...

  2. 怎样删除windows.old文件

    方法1: 1.在C盘上点右键,选择属性.2.在常规选项卡中点击”磁盘清理“3.稍等片刻再弹出的选项卡中点击清理系统文件4.选中以前Windows的安装5.点击确定即可安全清理 方法二: WIN7中的w ...

  3. WinMain函数详解(转载再编辑)

    在Windows应用程序中,我们可以认为 WinMain() 函数是程序的入口,WinMain()的原型如下: int WINAPI WinMain( HINSTANCE hInstance, HIN ...

  4. Docker 为 ASP.NET Core WebApi 应用程序生成 Docker 映像,创建容器并运行

    1.使用VS2017新建ASP.NET Core WebApi项目 选择API启用Docker支持 2.为 ASP.NET Core WebApi 应用程序生成 Docker 映像,并创建容器运行 生 ...

  5. Java - “JUC”锁

    [Java并发编程实战]-----“J.U.C”:锁,lock   在java中有两种方法实现锁机制,一种是在前一篇博客中([java7并发编程实战]-----线程同步机制:synchronized) ...

  6. Apache poi 使用经验分享

    我在使用apache poi导入导出Excel做项目过程中,遇到了许许多多的问题,在此简单罗列. 1.xls和xlsx的区分:poi将2003以前和2007以后的excel封装成了两个不同的实现:HS ...

  7. HDU3062(2-SAT)

    Party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. 初识Java作业

    初识Java作业 一.    填空题 Java技术按照用途不同分为三大版本,分别是JavaSE.     javaEE       和JavaMe Java虚拟机就是一个虚拟的用于执行  .class ...

  9. git 报错:error: failed to push some refs to 'https://github.com/Anderson-An/******.git'(已解决)

    提交push 报错: $ git push origin masterTo https://github.com/Anderson-An/******.git ! [rejected] master ...

  10. BZOJ2208: [Jsoi2010]连通数(tarjan bitset floyd)

    题意 题目链接 Sol 数据水的一批,\(O(n^3)\)暴力可过 实际上只要bitset优化一下floyd复杂度就是对的了(\(O(\frac{n^3}{32})\)) 还可以缩点之后bitset维 ...