python第四十三课——封装性

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__)

原文地址:https://www.cnblogs.com/hankleo/p/10458426.html

时间: 2024-10-10 05:15:44

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

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

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十三课:FreeType库 在OpenGL中使用FreeType库 使用FreeType库可以创建非常好看的反走样的字体,记住暴雪公司就是使用这个库的,就是那个做魔兽世界的.尝试一下吧,我只告诉你了基本的使用方式,你可以走的更远

Python第十九课(封装)

Python第19课(封装)    >>>思维导图>>>中二青年 封装 什么是封装? 就是将复杂的丑陋的,隐私的细节隐藏到内部,对外提供简单的使用接口 对外隐藏内部实现细节,并提供访问的接口 什么时候应该封装? 当有一些数据不希望外界可以直接修改时 当有一些函数不希望给外界使用时 为什么需要封装 ? 1.为了保证 关键数据的安全性 2.对外部隐藏实现细节,隔离复杂度 语法 class Person: def __init__(self,id_number,name,ag

JAVA学习第四十三课 — 集合框架工具类(一)

一.Collections:集合框架的工具类 其中的方法都是静态的 排序方法演示 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; class ComparaByLeng implements Comparator<String>{ public int compare(String o1, String o2) { int

python学习四十三天(网络IO模型)

阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 异步IO(Asynchronous I/O) 六 IO模型比较分析 七 selectors模块 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)I

python第四十课——构造函数

1.动态给对象添加属性: 在对象创建完毕后,单独为其添加需要的属性:可以理解为:私人定制 [注意]: 添加的属性只有此对象能够使用,别的对象如果用了,直接报错; 2.构造函数/构造方法/构造器: 格式:__init__(self,...): 作用: 1).创建对象 2).为对象的属性赋值 [注意]: 1).构造函数也是函数,同样没有函数重载之说, 也就意味着,如果在一个类中出现多个同名的构造函数,最后一个覆盖之前所有的 2).如果人为不显示的定义构造函数,那么系统会默认提供给类一个空参数的构造,

第四十三课

webapp  server与java技术基础 java技术基础及tomcat入门 tomcat配置详解 tomcat配置及案例

python学习第十三课

HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器根据标记语言的规则去解释它. 浏览器负责将标签翻译成用户"看得懂"的格式,呈现给用户 文档树 Doctype Doctype告诉浏览器使用什么样的html或xhtml规范来解析html文档 有和无的区别 BackCompat:标准兼容模式未开启(或叫怪异模式[Quirks mode].

Python第四堂课(LINUX系统指令一)

开启Linux操作系统,要求以root用户登录GNOME图形界面,语言支持选择为汉语 使用su指令  su root 然后根据提示输入密码即可 使用快捷键切换到虚拟终端2,使用普通用户身份登录,查看系统提示符 Ctrl+alt [F1-F6]可以自由切换终端,命令行界面会显示普通维护提示符为$,ROOT用户为# 使用命令退出虚拟终端2上登录的用户 输入EXIT即可 使用快捷键切换到虚拟终端5,使用管理员身份登录,查看系统提示符 此题不再赘述 使用命令退出虚拟终端5上登录的用户 此题不再赘述 切回

第四十三课:jQuery插件化

我们先来看一个最简单的例子: (function($){ $.fn.extend({     //把此插件添加到jQuery的原型上 pluginName:function(){   //插件的名字 return this.each(function(){     //遍历匹配元素的集合 //插件要实现的功能 }); } }); })(jQuery);   //传入jQuery对象 由于jQuery是集化操作($("div")会选择多个div元素进行操作),而我们的插件编写应该一个元素