组合与封装

面向对象的精髓:是将数据和处理数据的代码绑定在一起,成为一个对象

          只要获取到对象,相应的数据和方法都有

 1 class Mysql:
 2     def __init__(self,host,port,db,charset):
 3         self.host = host
 4         self.port = port
 5         self.db = db
 6         self.charset = charset
 7 
 8     def exc2(self,proc_name):
 9         conn=connect(self.host,self.port,self.db,self.charset)
10         conn.call_proc(proc_name)
11         return 123
12 
13     def exc1(self,sql):
14         conn=connect(self.host,self.port,self.db,self.charset)
15         conn.execute(sql)
16         return 123
17 
18 
19 my1 = Mysql("127.0.0.1",3306,"mydb","utf-8")
20 
21 my1.exc1("select *from table1")
22 my1.exc2("名字")
面向对象

什么是组合?  多个对象放在一起叫做对象 组合可以降低代码冗余

       在程序中 一个对象将另一个对象作为自己的属性

      组合是 对象之间的关系

 1 '''
 2 用代码 描述乐队   一个乐队有其他多个乐器组成 主唱
 3 乐队可以演奏歌曲
 4 主唱是歌手类  会唱歌 ,有名字
 5 钢琴类   能弹奏,有价格,牌子
 6 '''
 7 class Band:
 8     def __init__(self,name,singer,piano):
 9             self.name = name
10             self.singer = singer
11             self.piano = piano
12 
13     def play_music(self):
14             print('hello 我们是%s组合,请欣赏演出'%self.name)
15             self.singer.singing()
16             self.piano.playing()
17 
18 class Singer:
19        def __init__(self,name)
20             self.name = name
21 
22        def singing(self):
23             print("你好我是主唱 ",self.name)
24 
25 class piano:
26         def __init__(self,price,brand)
27             self.prince = price
28             self.brand = brand
29 
30         def playing(self):
31             print("你好我是钢琴手 ",self.name)
32 
33 singer = Singer('alan')
34 p = piano('10000','bleak') 
35 b = Band('FY',singer,p)
36 b.playing_music()
37    
组合示例

面向对象三大特征之封装:

  什么是封装? 封装是指隐藏内部实现细节,对外提供使用接口

        封装不是单纯的隐藏

  为什么要封装? 1.提高安全性

         2.封装是为了明确区分内部与外部

         3.对于封装而言是为了隔离复杂度

  如何使用?  在属性或方法名称前加上双下划线

       python中权限只有两种,公开的(任何人都可以访问)和私有的(只能自己访问)

       属性的封装,通常需要提供相应的设置器和访问器

         对于被隐藏的属性  访问和修改都需要通过方法 get用于获取  set用于设置(也称之为设置器和访问器)

  什么时候使用?

       当一个类中有某些属性和方法,不应该让外界直接访问,就应该对其进行封装

  封装的实现原理

       本质上python并没有强制限制访问,而是通过语法转换来实现的封装

       会将__开头的属性转换为_类名__属性名

  封装的特点

       被隐藏的内容在内部可以直接访问,但是在外部无法直接访问

       子类无法覆盖和访问父类的私有属性和方法

 1 class Student:
 2     def __init__(self,name,sex,age,id_card):
 3         self.name = name
 4         self.sex = sex
 5         self.age = age
 6         self.__id_card = id_card
 7 
 8     def get_idCard(self,pwd):
 9         if pwd == '9999':
10             return self.__id_card
11         else:
12             print('无权限')
13     def set_idCard(self,pwd,new_idCard):
14         if pwd == '9999':
15             self.__id_card = new_idCard
16         else:
17             print('无权限')
18 
19 stu = Student('alan','man',20,'963852741')
20 stu.get_idCard('9999')
21 print(stu.get_idCard('9999'))
22 stu.set_idCard('9999','123456789')
23 print(stu.get_idCard('9999'))
封装实例

 

posted @ 2018-12-18 15:33  yyf1  阅读(152)  评论(0编辑  收藏  举报