封装简介|学习笔记

简介: 快速学习 封装简介

开发者学堂课程【Python 语言基础 3:函数、面向对象、异常处理封装简介】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/601/detail/8747


封装简介


内容简介


一、封装是面向对象的三大特性之一

二、如何隐藏一个对象中的属性

三、如何获取(修改)对象中的属性

四、使用封装,确实增加了类的定义的复杂程度,但也确保了数据的安全性

 

 

一、封装是面向对象的三大特性之一

封装指的是隐藏对象中的一些不希望被外部所访问到的属性或方法。

简单说就是一些内部自己用的属性或方法不希望被外部所访问的,这时候就要封装起来。所以,封装就是隐藏不希望被外部所访问到的属性或方法。

举一个狗的例子: 表示狗的类,里边有四个属性。

class Dog:

def

init(self , name , age , gender- ,height):

self. name = name

self.age = age

self. gendergender

self. height = height

现在就只留一个name属性,

class Dog:

def

init(self , name):

self. name = name

创建一个d=Dog(‘旺财’)

print(d.name)

然后执行出现:

旺财

Rep1 Closed  

当然也可以改,在下边创建一个d.name=‘小黑保存、执行会出现:

小黑

Rep1 Closed

也就是说 name 属性既可以读取也可以修改,但是现在 name 属性没有用到封装,既然是要封装就涉及到两个问题:一是藏起来,二是露出来一部分。不希望被访问的就要藏起来,但有一些东西是希望被访问的就要露出来。

 

二、如何隐藏一个对象中的属性

class Dog:

def

init(self , name):

self. name = name  现在这个 name 属性不希望被访问,把它藏起来,最简单的方法就是将对象的属性名称修改为一个外部不知道的名字。比如说修改成

class Dog:

def

init(self , name):

self. hidden name = name 现在 self 里 边的属性是 hidden name 不叫name 了,现在修改 name 就没有效果了。这里定一个方法:

def say hello(self)

print(‘大家好,我是%s’%self.hidden name)这里注意现在属性就不能用name 表示了,要用 hidden name,因为刚才已经把属性名改成了 hidden name。这时候直接d.say hello()保存执行就变成了:

大家好,我是 旺财

Rep1 Closed

所以这时候修改 name 已经没有效果了,被隐藏起来了叫做 hidden name。要注意,现在没有一种方式可以把属性完全的藏起来。所以现在藏起来已经学会了。

 

三、如何获取(修改)对象中的属性

class Dog:

def

init(self , name):

self. hidden name = name

def say hello(self)

print(‘大家好,我是%s’%self.hidden name)

现在属性已经藏起来了,简单来说现在 hidden name 是不被外部所访问的,但是内部是可以访问的,这个时候希望在外部也可以获取到 hidden name 就需要一个通用的方法,提供 getter 和 setter 方法使外部可以访问到属性。

getter 获取对象中的指定属性(get 属性名)这是 getter 方法,比如现在希望外部可以访问到 hidden name 就要 def get name(self) 注意这里要用真实的属性名,hidden name 是隐藏的属性名。然后 g et name()用来获取对象的 name 属性,这时候直接 return self.hidden name 如下

class Dog:

def

init(self , name):

self. hidden name = name

def say hello(self)

print(‘大家好,我是%s’%self.hidden name)

def get name(self)

get name()用来获取对象的name属性

return self.hidden name      

这时候在最后 print(d.get name())执行就会出现:

旺财

Rep1 Closed

这个就是 get name()用来获取对象属性的方法。

Setter用来设置对象的指定属性(set 属性名),现在尝试定一个 setter 方法,这里注意 setter 不能仅有一个参数了,因为setter是设置、修改属性,所以还需要加一个参数def set name(self,name):这里的 name 代表的是你希望把它改成什么的一个值,这时候self.hidden name=name 如下:

class Dog:

def

init(self , name):

self. hidden name = name

def say hello(self)

print(‘大家好,我是%s’%self.hidden name)

def get name(self)

get name()用来获取对象的name属性

return self.hidden name      

def set name(self,name):

self.hidden name=name

这时候如果想改这个属性的话可以在下边写一个# 调用 setter 来修改 name 属性,直接d.set name(‘小黑’)如下:

class Dog:

def

init(self , name):

self. hidden name = name

def say hello(self)

print(‘大家好,我是%s’%self.hidden name)

def get name(self)

  get name()用来获取对象的name属性

return self.hidden name      

def set name(self,name):

self.hidden name=name

 

# 调用 setter 来修改 name 属性

d.set name(‘小黑’)

print(d.get name()

然后执行变成

小黑

Rep1 Closed

如果调一下 say hello(),改之前和改之后都调一下,

d=dog(‘旺财’)

d.say hello()

# 调用 setter 来修改 name 属性

d.set name(‘小黑’)

d.say hello()

#print(d.get #print(d.get)执行后出现

大家好,我是 旺财

大家好,我是 小黑

小黑

Rep1 Closed

开始是旺财,后来变成小黑了,也就是说现在通过 set name(‘小黑’)把属性给改了,所以这是一个通用的方式,第一需要把属性名藏起来,第二种方式通过get name(self):获取到属性,通过set name(self,name):设置属性,这就是最通用的方式。这样做虽然麻烦但是曾经了数据的安全性。

 

四、使用封装,确实增加了类的定义的复杂程度,但也确保了数据的安全性

1、隐藏了属性名,是调用者无法随意的修改对象中的属性

2、增加了 getter 和 setter 方法,很好的控制了属性是否是只读的

   如果希望属性是只读的,则可以直接去掉 setter 方法

如果希望属性不能被外部访问,则可以直接去掉 getter 方法

3、使用 setter 方法设置属性,可以增加数据验证,确保数据的值是正确的。

4、使用 getter 方法获取属性,使用 setter 方法设置属性,可以在读取属性和修改属性的同时做一些其他的处理。

相关文章
|
安全 Linux 数据安全/隐私保护
linux设置用户密码
在Linux中更改用户密码,使用`passwd`命令。要改当前用户密码,键入`passwd`;若要为其他用户(如`john`)更改密码,需有足够权限,输入`passwd 用户名`。按提示输入新密码并确认,终端不会显示输入内容。确保密码复杂且安全。作为root或有相应权限才能更改他人密码。忘记密码时,可能需通过恢复模式或引导加载器重置。具体步骤依Linux发行版不同。
572 4
|
编解码 前端开发 JavaScript
跨平台兼容性
【10月更文挑战第31天】跨平台兼容性
548 2
|
缓存 监控 Java
在Linux中,发现内存可用量很小,接下来怎么办?
在Linux中,发现内存可用量很小,接下来怎么办?
|
存储 安全 Linux
|
运维 监控 API
CloudStack 中的IP地址状态解析:Allocated、Reserved与Free
CloudStack 中的IP地址状态解析:Allocated、Reserved与Free
298 9
|
C语言
C语言——字符串大小写互换
C语言——字符串大小写互换
461 0
|
数据挖掘 5G 定位技术
行政边界与路网、建筑轮廓、POI、基站数据下载网站整理
行政边界与路网、建筑轮廓、POI、基站数据下载网站整理
701 2
阿里云服务器怎么更换操作系统?
阿里云主机的操作系统可以按自己的要求去更改,可以是WINDOWS或是LINUX的操作系统,本文介绍阿里云ECS怎么更换系统盘操作系统的流程。购买前请先:领取阿里云幸运券,有很多优惠,下文中有领取链接。 购买建议多买几年,年数越多优惠越多。
15957 0
|
BI 数据安全/隐私保护
二维码活码和静态码有什么区别?
作为万物互联时代的“数字身份证”,二维码在物流运输、生产制造、会议签到、移动支付等行业广泛应用,极大地改变了人们的日常生活。接下来,我们就为大家科普一下二维码的类型,也就是活码和静态码。
578 0
|
开发工具 git
将本地文件上传到gitee和GitHub,以及Github加速访问
将本地文件上传到gitee和GitHub,以及Github加速访问
651 0
将本地文件上传到gitee和GitHub,以及Github加速访问