面向对象-三才之境

何谓三才?天地人。面向对象也有三才?封装-继承-多态。

姑妄论之,三才之境,简直就是对面向对象的三个特性的最好的解释。

天,神神秘秘,条条框框,上百载修仙,三万载成神,将神及其衣食住行等包装起来,和封装神合貌合,封装将数据、方法包装起来,其一是为了提高神秘度,隔离复杂度,其二是对自己的保护,对自己隐私的保护;地,厚厚重重,衍生之基,地势坤,厚德载物,大地继承了天的阔与广,又发展了自己的纳物容人,层级关系明显,功能划分清晰,将继承这一特性诠释的很好;人,人士我们最了解的,因为我们自己就是这一类中的一的对象,多态的特性在跟人做类比的时候,我们会理解的更加清晰,千姿百态,万象正新。

封装在前文有大量陈述,继承,一个类型继承另外一个类型,当前类型就会拥有另一个类型的所有公共属性和方法。此时,有了父类与子类:

父类:被继承的类,也叫基类、超类

子类:继承了父类的类,也叫派生类,子类拥有父类所有的公共属性和方法(关系就如你是老李家的儿子/女儿,而老李家却不是你,因为还有其他的人以及物)

一个子类,可继承父类,父类之前也还可以继承父类,如家谱一样,子类与父类是“is a”的关系。

那么就又出现了多继承,就像一家人可以要更多的子嗣,一个人也可以有更多的干爹干妈;一个子类,可同时继承多个父类,可以同时使用多个父类的属性和方法

那么就又出现了一个情况,父类中出现相同属性或方法时,优先继承优先使用,(先查找子类自身中是否有需要的属性/方法,若有,直接使用,若没有,根据继承顺序,逐级查找,直到找到第一个为止,并调用)可使用__mro__:查看属性/方法的搜索顺序

所以,在写代码的时候,尽量不要在父类中定义相同名称的属性或方法

当然,子类有自己的独立性与可变性,可以重新定义父类中存在的方法(方法重写),子类继承了之后,想调用父类的属性和方法怎么调用呢?

class User(Person):

    def __init__(self, name, age):

        # 直接通过父类的类名称调用父类的属性和方法

        Person.__init__(name, age)

        # 通过super()来调用父类的属性和方法

        super().__init__(name, age)

子类有自己的可变性,就出现了多态,什么是多态呢?程序在运行的过程中,根据执行条件的不同,动态执行不同的操作代码的过程称为程序运行时多态。

面向对象-三才之境_第1张图片
腾讯网图标之面向对象

多态也许不是主观意识推动的,但是却会在我门编码的时候不自觉的开始,当我们熟悉了面向对象之后,不会再问什么是多态了,因为我们已经从代码的编写过程中体会到了多态的存在,就像小得时候总是问:风是什么?感觉解释不上来,但随着我们的成长,自然而然就感觉到了风,当她时而轻柔时而狂暴的时候更为明显。

你可能感兴趣的:(面向对象-三才之境)