面向对象编程(三)——Python
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
Python——面向对象编程
第三章——Python对象的生命周期,以及周期方法(83-94)
监听对象的生命周期
生命周期的概念
第四章——面向对象编程-综合案例(96-109)
第五章——面向对象三大特性(110-151)
封装
概念
将一些属性和相关方法封装在一个对象中。
其中,对外隐藏内部具体实现细节,外界只需要根据"内部提供的接口"去使用就可以。
好处
- 使用起来更加方便。
因为已经把很多相关的功能, 封装成一个整体。
类似于像外界提供一个工具箱
针对于不同的场景, 使用不同的工具箱就可以 - 保证数据的安全。
针对于安全级别高的数据, 可以设置成"私有"。
可以控制数据为只读,外界无法修改。
也可以拦截数据的写操作,进行数据校验和过滤。 - 利于代码维护。
如果后期, 功能代码需要维护, 则直接修改这个类内部代码即可;
只要保证接口名称不变; 外界不需要做任何代码修改。
继承
概念
一个类"拥有"另外一个类的"资源"的方式之一,
其中"拥有”指——并不是资源的复制, 变成双份资源,而是资源的使用权。
“资源”——指"非私有的"属性和方法。
目的: 方便资源重用。
分类
单继承
仅仅继承了一个父类。
class Dog(Animal):
pass
多继承
继承了多个父类
class child(Father, Mather):
pass
type和object区分
objiect也是一个类,在官方文档中有诸多方法,因此在py3中定义一个类系统自动是新式类,也就是继承了objict的方法。object是父子关系的顶端,所有的数据类型的父类都是它。
type——元类,object也是由type继承而来——object是type的一个实例。type是类型实例关系的顶端,所有对象都是它的实例的。
class Animal:
pass
class XXX:
pass
class Dog(Animal,XXX):
pass
由此实例画出以下流程图:
继承下的影响
资源的继承
除下私有的属性和私有的方法, 其他的基本都能继承。
资源的使用
- 继承的几种形态:
(1)单继承链
(2)无重叠的多继承链
(3)有重叠的多继承链
- 资源继承的标准的顺序——遵循单调原则
由上图可知
对于单继承链:A-B-C
class C:
# age = "c"
pass
class B(C):
# age = "b"
pass
class A(B):
# age = "a"
pass
# A -> B -> C
print A.age
对于无重复的多继承链:A-B-D-C-E
class E:
age = "e"
class D:
# age = "d"
pass
class C(E):
# age = "c"
pass
class B(D):
# age = "b"
pass
class A(B, C):
# age = "a"
pass
print A.age
A -> B -> D -> C -> E
对于有重复的多继承链:A-B-C-D
class D:
# age = "d"
pass
class C(D):
age = "c"
pass
class B(D):
# age = "b"
pass
class A(B, C):
# age = "a"
pass
print A.age
A -> B -> D -> C
- 资源使用的方案演化*(未明,后续再更)*
资源的覆盖
资源的累加
多态
多态的概念
一个类, 所延伸的多种形态,在继承的前提下; 使用不同的子类, 调用父类的同一个方法, 产生不同的功能,调用时的多种形态。
多态在python中的体现
实例:
import abc
class Animal(object, metaclass=abc.ABCMeta):
@abc.abstractmethod
def jiao(self):
pass
@abc.abstractclassmethod
def test(cls):
pass
class Dog(Animal):
def jiao(self):
print("汪汪汪")
@classmethod
def test(cls):
print("xxxxx")
pass
class Cat(Animal):
def jiao(self):
print("喵喵喵")
def test(obj):
obj.jiao()
d = Dog()
d.jiao()
d.test()

浙公网安备 33010602011771号