1、封装的概念
将对象的数据与操作数据的方法相结合,通过方法将对象的数据与实现细节保护起来,就称为封装。外界只能通过对象的方法访问对象,因此封装同时也实现了对象的数据隐藏。
2.封装的意义
对象中的成员属性如果没有被封装,一旦对象创建完成,就可以通过对象的引用获取任意的成员属性的值,并能够给所有的成员属性任意赋值。在对象的外部任意访问对象中的成员属性时非常危险的,因为对象中的成员属性是对象本身具有的与其他对象不同的特征,是对象某个方面性质的表现。例如,“电话”的对象中有一些属性值是保密技术,是不想让其他人随意能获取到的。在比如,在”电话”对象中的电压和电流等属性的值,需要规定在一定的范围内,是不能被随意赋值的。如果对这些属性赋一些非法的值,例如手机的电压赋上380V的值,就会破坏电话对象。
对象中的成员方法如果没有被封装,也可以在对象的外部随意调用,这也是一种危险的操作。因为对象中的成员方法只有部分是给外部提供的。保留有限的对外接口使之与外部发生联系。而又一些事对象自己使用的方法。例如,在”人”的对象中,提供了”走路”的方法,而”走路”的方法又是通过在对象内部调用”迈左腿”和” 迈右腿”两个方法组成。如果用户在对象的外部直接调用” 迈左腿”或” 迈右腿”的方法就没有意义,应该只让用户能调用”走路”的方法。
封装的原则就是要求对象以外的部分不能随意存取对象的内部数据(成员属性和成员方法).从而有效地避免了外部错误对它的”交叉感染”,是软件错误能够局部化,大大较少差错和拍错的难度。
3.如何实现封装?
3.1封装实现的步骤
1.完成一个类的定义
2.所有属性私有化
3. 给每个属性提供set/get方法
例如:
# 定义了一个商品类型,封装和商品有关系的数据
class Goods:
def __init__(self, name, price, stock):
self.name = name
self.price = price
self.stock = stock
#封装具体的数据到对象中:对象是通过类型来封装具体的数据的
g1 = Goods(“连衣裙”, 199, 120)
# 将对象敏感的数据,封装在类的内部,不让外界直接访问;而是通过定义的set/get方法来间接访问内部的数据的过程,此时,就可以在set/get方法中,添加条件限制代码!
例如:
classPerson:
def__init__(self, name, age):
self.__name = name
self.__age = age
def set_name(self, name):
self.__name = name
def get_name(self):
returnself.__name
def set_age(self, age):
if age >= 0 and age <= 100:
self.__age = age
else:
print("设置的年龄不合法...")
def get_age(self):
returnself.__age
def __str__(self):
return"姓名:%s;年龄:%s"% (self.__name,self.__age)
网友评论