分享

山腰复习群知识点

 Four兄 2019-08-24

复习课主要以知识点梳理+一个代码的练习+问题答疑

#

通过这个复习课,帮助大家巩固类与对象这个知识点

#

有疑问的同学,在讲解中间,助教会留出时间来给大家提问,希望大家遵守一下提问秩序哈~

#

12关、13关我们学习的面向对象编程,是山腰学习中最重要的知识内容

#

学习这两关的目标是

#

1)了解何为对象

2)区分变量与类属性,函数与类方法

3)掌握类的实例化及初始化函数

4)熟练继承与子类定制

#

涉及到的难点有:

类的实例化,初始化函数的改写,继承的用法

#

首先我们要知道,什么是面向对象编程

#

面向对象编程就是以对象为中心,将一组对象组成程序。使用于较复杂,尤其需要持续更新的代码场景。

#

那么类是什么?

#

类,是一个函数包。类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量,(也就是类方法可以调用类属性)

#

类中的 函数 叫 ‘方法’,类中的 变量 叫 ‘属性’(就不要再说函数和变量了,要说类方法和类属性)

#

#

那么,方法和属性我们知道了,那什么是参数呢?

#

参数是,我们在定义函数的时候,需要传递给类方法的东西

#

我们举个例子

#

#

在这里的代码中,我们在定义函数的时候,留了一个需要手动传递参数的位置

#

所以在调用类方法的时候,需要手动设置一个参数

#

如果没有设置参数,或者参数设置多了,都会报错

#

但有一种情况可以不手动设置参数

#

那就是在定义方法的时候,将需要的参数设置为默认参数

#

#

这里有没有疑问的同学呢?

#

我们继续

#

在同一个类里面,不同方法之间,还可以实现方法的调用

#

举个栗子

#

#

在方法 live()中,就调用了方法 born()

#

顺着这个例子,我们接着讲到,类的实例化是什么?实例怎么使用?

#

类是对象的模板,可以复制出多个对象,这个过程叫实例化

#

格式 : 实例名=类名() 

#

#

这里要注意,类实例化的时候,类的括号不能丢

#

被创造出来的实例与类一模一样,但是它是独立的对象

#

调用类属性和类方法的格式分别为:

调用类的属性:实例名.属性;

调用类的方法:实例名.方法()

#

这里给大家展示一下例子

#

#

这个例子属于,在类外部调用类的属性

#

我们用print语句将my_computer这个实例的screen这个属性打印出来

#

属性可以在外部调用,也可以在类的内部调用

#

当在类的方法内部想调用类属性或其他方法时,就要采用self.属性名或self.方法名的格式。(相当于改变了作用域)

#

#

有同学问,为什么实例调用方法时不用传参,定义时不是有个参数self吗?

#

这就是参数self的特殊之处:在定义时不能丢,在调用时要忽略

#

self的作用是,self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行

#

通俗一点理解,只要记住,加上self.前缀的类属性和类方法,准确来说叫实例属性和,可以在类下的不同类方法中实现调用

#

那么,实例的对象,和类之间有什么联系呢

#

首先,实例属性和类属性:

1)修改类属性,这会导致所有实例属性变化(因为类是模板);

2)修改实例属性,但这不会影响到其他实例,也不会影响到类。因为每个实例都是独立的个体。

#

其次,实例方法和类方法:

1)重写类方法,这会导致所有实例方法自动被重写;

2)实例方法不可重写

#

#

到这一步为止,有没有疑问呢

#

继续

#

初始化函数

#

初始化函数(方法),也叫构造函数,它的意思是,当你创建一个实例的时候,这个函数就会被调用。

#

初始化函数的写法是固定的格式:中间是“init”,这个单词的中文意思是“初始化”,然后前后都要有【两个下划线】,然后__init__()的括号中,第一个参数一定要写上self,不然会报错

#

也就是写成def __init__(self):

#

#

我们一般会用初始化函数来做什么呢?

#

在初始化方法内部完成类属性的创建,为类属性设置初始值,这样类中的其他方法就能直接、随时调用。不需要再调用__init__()

#

举个栗子

#

#

在这个类中,一旦调用,就会执行初始化函数创建类属性

#

在初始化函数的定义时,也可以设置需要传递的参数位置

#

在实例化类的时候,可直接手动传入参数

#

#

继续讲最后一个知识,类的继承

#

类的继承很大程度也是为了避免重复性劳动。比如说当我们要写一个新的类,如果新的类有许多代码都和旧类相同,又有一部分不同的时候,就可以用“继承”的方式避免重复写代码;

#

同理,在类的继承后,子类重写初始化函数时调用父类的初始化函数,也是因为许多代码都和旧类相同,又有一部分不同的时候,就可以用调用的方式避免重复写代码;

#

子类创建的实例,同时属于父类

父类创建的实例,不属于子类;

#

#

这个例子属于类的定制和调用,能够理解这个代码,其实对于类的继承最核心的知识就掌握了

#

子类会自动拥有父类的属性和方法,子类不需要显示写出来,显示写的方法叫重写方法,即名字与父类的方法名相同,函数参数也相同则父类的方法被重写

#

#

就是很多人常问的课程上的题目,这里为什么要加book.__init__

#

这里就是重写了方法,如果你已经继承父类的方法,但是子类又重新写了初始化函数,那么就属于重写,要重写就要在下一行加入父类.__init__(self,xx)这样的格式

#

在Python中,子类如果定义了构造函数,而没有调用父类的,那么Python不会自动调用,也就是说父类的构造函数不会执行

#

如果子类没有定义自己的初始化函数,父类的初始化函数会被默认调用;但是如果要实例化子类的对象,则只能传入父类的初始化函数对应的参数,否则会出错。

#

Python支持多继承,如果多个继承类都重写了相应属性和方法,则按就近原则继承属性和行为,这里的就近就是C1。如下图所示:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多