面向对象编程(三)——Python

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

Python——面向对象编程

第三章——Python对象的生命周期,以及周期方法(83-94)

监听对象的生命周期

生命周期的概念

第四章——面向对象编程-综合案例(96-109)

第五章——面向对象三大特性(110-151)

封装

概念

将一些属性和相关方法封装在一个对象中。
其中,对外隐藏内部具体实现细节,外界只需要根据"内部提供的接口"去使用就可以。

好处

  1. 使用起来更加方便。
    因为已经把很多相关的功能, 封装成一个整体。
    类似于像外界提供一个工具箱
    针对于不同的场景, 使用不同的工具箱就可以
  2. 保证数据的安全。
    针对于安全级别高的数据, 可以设置成"私有"。
    可以控制数据为只读,外界无法修改。
    也可以拦截数据的写操作,进行数据校验和过滤。
  3. 利于代码维护。
    如果后期, 功能代码需要维护, 则直接修改这个类内部代码即可;
    只要保证接口名称不变; 外界不需要做任何代码修改。

继承

概念

一个类"拥有"另外一个类的"资源"的方式之一,
其中"拥有”指——并不是资源的复制, 变成双份资源,而是资源的使用权。
“资源”——指"非私有的"属性和方法。
目的:  方便资源重用。

分类

单继承

仅仅继承了一个父类。

class Dog(Animal):
	pass
多继承

继承了多个父类

class child(Father, Mather):
	pass

type和object区分

objiect也是一个类,在官方文档中有诸多方法,因此在py3中定义一个类系统自动是新式类,也就是继承了objict的方法。object是父子关系的顶端,所有的数据类型的父类都是它。
type——元类,object也是由type继承而来——objecttype的一个实例。type是类型实例关系的顶端,所有对象都是它的实例的。

class Animal:
	pass
class XXX:
	pass
class Dog(Animal,XXX):
	pass

由此实例画出以下流程图:
Figure2

继承下的影响

资源的继承

除下私有的属性和私有的方法, 其他的基本都能继承。

资源的使用

  1. 继承的几种形态:
    (1)单继承链
    (2)无重叠的多继承链
    (3)有重叠的多继承链
    Figure3
  2. 资源继承的标准的顺序——遵循单调原则
    由上图可知
    对于单继承链: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

  1. 资源使用的方案演化*(未明,后续再更)*
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

资源的覆盖

资源的累加

多态

多态的概念

一个类, 所延伸的多种形态,在继承的前提下; 使用不同的子类, 调用父类的同一个方法, 产生不同的功能,调用时的多种形态。

多态在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()
posted @ 2022-06-12 11:00  Luciferpluto  阅读(1)  评论(0)    收藏  举报  来源