封装的操作过程和意义

2017-07-27  本文已影响0人  云Shen不知处

1.面向对象的特征——封装

封装”就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体(即类);封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。

将对象敏感的数据封装在类的内部,不让外界直接访问,而是通过当前类提供的set/get方法间接访问数据,此时就可以在set/get中添加限制条件进行访问数据的控制。

1.类的属性

类由属性和方法组成,类的属性是对数据的封装,而类的方法是对类的行为的封装。

类的属性按使用范围分为共有属性私有属性。具体地,在Python实现面向对象的编程思想的时候,封装在类中的属性可以分为两种:数据类的属性数据对象的属性(也可以成为数据类的成员变量和属于对象的成员变量),其中,这两种成员变量又各自分为共有成员变量和私有成员变量。

2.类的成员变量和对象的成员变量

类的成员变量定义在类中,和类的成员函数在同一缩进等级。而对象的成员变量定义在init(self)成员函数中,和init(self)函数下的变量和语句在同一等级。通俗地讲,类的成员变量属于类,共类的所有对象和类本身所共有,也就是说所有的类的对象和类只有一份这样的变量。而对象的成员变量属于类的对象本身,每个对象都有一份,而且各个对象之间互不影响。

3.封装实现的步骤:

定义类型,封装零散数据【抽象的属性】

[使用__slots__属性,限制当前类的属性列表à为了代码的统一性]

所有属性私有化【属性使用双下划綫开头,外界就不能直接访问这样的属性了】

给每个属性提供set/get方法,在方法中添加限制条件

1.class Users(object):

     def__init__(self,name):

       self.name = name

u = Users("tom")

print(u.name)

u.name ="jerry"

print(u.name)

2.封装私有化,提供set/get函数

class Person(object):

def__init__(self,name):

       self.__name = name

def set_name(self,name):

     self.__name=name

def  get_name(self):

     return  self.__name

 p = Person("shuke")

print(p.get_name())

p.set_name("jerry")

print(p.get_name())

3.高级封装

使用@property和@get_method.setter注解,来注释set/get方法,隐藏set/get方法的实现,让方法的使用方式和属性一致

class Computer(object):

         def__init__(self,name):

         self.__name = name

@property

def  get_name(self):

returnself.__name

@get_name.setter

def set_name(self,name):

       self.__name = name

c = Computer("dell")

print(c.get_name)

c.set_name ="hp"

print(c.get_name)

4.实现对方法的封装

在封装的过程中,除了封装私有属性,还可以针对一些底层的操作方法进行私有化,将方法封装在类的内部,通过提供的一个公共方法来控制该方法的访问权限

class Animals(object):

         def__init__(self,name,age):

        self.__name = name

         self.__age = age

@property

def name(self):

      return self.__name

@name.setter

def name(self,n):

      self.__name = n

@property

def age(self):

       returnself.__age

@age.setter

def age(self,a):

       if (a >=0)and(a <=20):

                 self.__age = a

      else:

                 print("年龄输入不合法..")

a =Animals("tiger",10)

a.name ="monkey"

print(a.name)

a.age =22

print(a.age)

封装的作用:一个是保护隐私,一个是降低程序复杂度,提高程序健壮性

上一篇下一篇

猜你喜欢

热点阅读