面向对象的精髓:是将数据和处理数据的代码绑定在一起,成为一个对象
只要获取到对象,相应的数据和方法都有
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'))