封装
实际工作中很多的成员不方便为对象之外的访问或者操作的,所以需要限定以下是否可以操作成员。
封装特性就是对于成员操作进行限制的保护性措施!
1 2 3
| 私有化封装 OK 受保护的封装(暂时不讲,在继承章节讲解) 公共的封装 OK
|
1 2 3
| 1.当前类/对象内部访问 (在类的结构内部) 2.类和对象的外部访问 (在类的结构外部) 3.类和对象的子类/子对象的访问(在类的结构外部,在子类/对象的内部)
|
1 2
| 方法:在成员属性或者方法名称之前,添加双下划线,就可以私有化成员。 特征:私有化的成员属性和方法,无法在类/对象的外部访问;私有化成员仅允许在类/对象的内部访问
|
1 2
| 方法: 任何成员在没有进行私有化操作的时候默认都是公共的封装。 特征: 公共的封装成员属性和方法,在任何位置都可以被访问。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| class Human: name = '张三' __sex = '男' age = 18 heart = '健康心脏' __kidney = '强大的肾脏'
def sing(self): print('都如艾米发馊拉稀都') def eat(self): print('我最喜欢吃西红柿炒番茄了!') def __run(self): print('121,121,锻炼身体') def talk(self): print('我的名字是',self.name) print('我的肾脏是非常好的',self.__kidney) self.__run()
zs = Human()
zs.talk()
zs._Human__run()
|
受保护的封装:在成员名称前面加一个下划线
受保护的目的:仅允许成员在当前类/对象或者子类/子对象中访问,外部禁止
注意:python目前不支持设定受保护的成员,但是开发者由约定的使用方式
1 2 3 4 5 6
| 类/对象内 子类/子对象中 类/对象外 私有化 √ × ×
受保护 √ √ √(实际上不允许)
公共的 √ √ √
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| class LiuBei: __wife = ('甘夫人','糜夫人','孙尚香') _money = '100' skin = '黄色' def eat(self): print('打死我***也不吃~ 真香啊~') def __study(self): print('好好学习天天向上') def _makeshoes(self): print('编草鞋') def test(self): print(self._money) self._makeshoes()
class LiuShan(LiuBei): pass
ls = LiuShan()
lb = LiuBei()
print(lb._money) lb._makeshoes()
lb.test()
print(ls._money) ls._makeshoes()
|
继承
面向对象中的继承就表示一个类获取另外一个类的成员的操作。(并非所有成员)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| class Father(object): familyname = '刘' __firstname = '备' sex = '男' age = 48 color = '黄色' __wife = ('甘夫人','糜夫人','孙尚香')
def eat(self): print('甜甜圈,咖啡,面包,方便面~') def run(self): print('拔起腿就跑~') def makeshoes(self): print('做草鞋')
class Son(Father): firstname = '禅' weight = '200斤'
def makeshoes(self): print('做皮鞋,不是人造革,是真的皮')
def run(self): print('穿上鞋子')
Father.run(self)
print('好汉饶命')
print(Son.__dict__)
ls = Son()
ls.run()
|
继承的特征:
1 2 3 4 5 6 7 8 9
| 1.在不指定父类的情况下,所有的类均继承自object类(系统提供的!) 2.子类继承父类就具有父类的所有成员。 3.子类继承父类,不会将父类成员复制到子类中,子类如果需要成员,可以找父类索取! 4.私有化的成员,允许在子类中单独建立一份,不会找父类索取私有成员 5.子类可以根据需求添加自己独有的成员来进行操作。 6.子类重载父类的成员。仅仅是对子类/对象有效。并不会影响父类 7.子类在重载父类的方法的时候,可以调用父类的方法来进行操作: super().父类方法名() -> 必须是带有self的对象方法才可以使用 父类名.父类方法名() -> 任何方式都允许
|