面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

面向对象的三大特性

封装、继承、多态

继承

定义:什么是什么的关系。一个类是另一个类的子类。

   新建的类可以继承一个或多个父类(父类又称基类、超类)

   新建的类又称为(子类 、派生类)

继承分为单继承和多继承

继承的优点:减少代码的冗余,增强了代码的重用性。

继承的用法

super() 调用父类的功能和方法

1 . 在子类内部调用父类的功能和方法可以不用传入参数,直接(super().属性名)

class 父类名:
    def 属性(self):
        功能
class 子类名(父类名):
    def 属性名(self):
        super().属性名


class A:
    def aa(self):
        print(11)
class B(A):
    def aa(self):
        super().aa()
b = B()
b.aa()

 

2.在子类外部调用父类的功能和方法

必须要给super 传入两个参数,一个是子类名,一个是对象名 .属性()

class 父类名:
    def 属性(self):
        功能
class 子类名(父类名):
    pass
对象 = 子类名()
super(子类名,对象).属性()

class A:
    def aa(self):
        print(11)
class B(A):
    pass
b = B()
super(B,b),aa()

当子类和父类中有同名的方法和属性时,一定是调用自己的。

如果想要调用父类的方法和属性时,需要借用super来调用。

对象调用方法,self就会指向谁。

自己私有的方法叫做派生方法,自己私有的属性叫做派生属性

抽象与继承的关系

 

技术分享图片

抽象类和接口类

抽象类定义:

可以实现具体的某个功能,并且不支持多继承的父类

接口类定义:

不实现具体的方法并且推荐多继承的这个父类

abc模块:

用于接口类和抽象类中的一个模块ABC是Abstract Base Class

object 是所有的基类

新式类和经典类

经典类: class 父类名:  (深度优先)

新式类: class 父类名(object): (广度优先)

广度优先(一层一层的至到没有结点)

从左到右每个分支查找完毕到他们的共同父类下的子类后,在去查找下一条分支,直到共同父类下的分组查找完毕后最后在查找他们共同的父类。

技术分享图片

 

深度优先:(遍历)

从左到右每个分支查看到底,在进行下一个分支的查找,如果有共同的父类,在查找的第一个分支,就会查找这个共同的父类,然后在进行下一个分支的查找,在后面查找是不会在去查找他们共同 的父类

 技术分享图片

mro() 可以查看寻找的顺序,经典类中不能使用

多态

一种事物的多种形态叫做多态,指一个参数 的多种形态

python 是自带多态

鸭子类型:在各种数据类型之间他们没有任何的联系,但是他们拥有着一些共同的属性或者功能

 

---恢复内容结束---



以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)

Scala的面向对象与函数编程

Python面向对象学习之八,装饰器