封装简介|学习笔记

简介: 快速学习 封装简介

开发者学堂课程【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 方法设置属性,可以在读取属性和修改属性的同时做一些其他的处理。

相关文章
|
4月前
|
开发者
简述库和框架的区别
简述库和框架的区别
42 2
|
4月前
|
Java
接口基础知识
接口基础知识
20 1
|
5月前
|
Unix Linux 测试技术
C++封装详解——从原理到实践
C++封装详解——从原理到实践
251 0
|
测试技术 C++
c++学习之mystring的简单封装
c++学习之mystring的简单封装
113 0
|
存储 安全 芯片
封装之打线简介
介绍封装打线的原理,常用材料的优缺点,关键部件,wire bonding 过程,主要参数,线形,线长和主要测试方法。
11124 3
封装之打线简介
|
网络协议 Java
JavaRPC原理与实现简介
远程过程调用(Remote Procedure Call,简称RPC)是一种计算机通信协议,它允许在不同的进程之间进行通信,就像在本地调用一样。JavaRPC是基于Java语言实现的一种RPC框架,旨在简化分布式系统的开发和管理。
144 0
|
C语言 C++
【C++】类的简介
【C++】类的简介
184 0
|
存储 PHP 开发者
|
安全 小程序 Scala
封装|学习笔记
快速学习封装。
下一篇
无影云桌面