封装
面向对象的程序设计中,某个类把所需要的数据(也可以说是类的属性)和对数据的操作(也可以说是类的行为)
全部都封装在类中,分别称为类的成员变量和方法(或成员函数)。这种把成员变量和成员函数封装在一起的编程
特性称为封装。
类由属性和方法组成,类的属性是对数据的封装,而类的方法是对类的行为的封装。
抽象的实现并不一定必须是一张表或映射表的数据结构,选择哪种方式对契约进行实现并不重要,对象的抽象优于它
的实现决定。外部视图不关心内部具体如何实现的。
抽象和封装是互补的概念,抽象关注对象的可观察到的行为(外部),而封装关注的是行为的实现。封装通常是通过
信息隐藏来实现的。信息隐藏是将那些不涉及对象本质特征的秘密都隐藏起来的过程。“复杂系统的每部分都不应该依
赖于其他部分的内部细节”,抽象“帮助人们思考他们做什么”,而封装“让程序可以借助最少的工作进行可靠的修改”。
封装在不同的抽象自己提供了明确的边界,因此导致了清晰的分离关注。如:表现层中,我们通常只关注业务层提供
了那些接口,而不会关注接口具体是如何实现的一样。较高抽象层次上的对象看不到较低抽象层次的实现细节。
平时,我们为类定义两个部分:一个接口和一个实现。类的接口描述了它的外部视图,包含了这个类所有实例的共同
行为的抽象。类的实现包含抽象的表示以及实现期望的行为的机制。通过类的接口,我们能知道客户可以对这个类的
所有实例所作出的假定。而客户不能对这个类的细节做任何假定。
“封装是一个过程,它分隔构成抽象的结构和行为的元素。封装的作业是分离抽象的概念接口与实现。”
类的方法也分为公有方法和私有方法。
类的私有方法只能通过对象名(在类内部也就是self)在类的内部进行访问。
而公有方法可以在类的外部通过对象名进行访问。
和属性不同的是,一般意义上的类方法属于对象,也就是说只有通过对象才可以进行调用,不能直接通过类名进行调用。
一般类方法的第一个参数必须是代指类对象本身的(一般我们常用self,实际上可以是任何自定义的名字,只不过self是
大家约定俗成的用法,在下面介绍的类方法中,大家一般用cls,因为那里更多地标识的是一个类),可以通过self访问
类对象的成员函数和数据。
同样,公有的成员函数和私有的成员函数也是通过名字来区分的,双下划线‘__’开头的函数是私有成员函数。
class MsgManagerment:
def __send_vlidate_code(self, code):
print("发送验证码...%s" % code)
def send_msg(self, type, code):
if type == "1":# 优化监控部
print("*********")
self.__send_vlidate_code(code)
return 0
else:
return "没有权限"
m = MsgManagerment()
res = m.send_msg("1", "abc")
print(res)
网友评论