复习课主要以知识点梳理+一个代码的练习+问题答疑 # 通过这个复习课,帮助大家巩固类与对象这个知识点 # 有疑问的同学,在讲解中间,助教会留出时间来给大家提问,希望大家遵守一下提问秩序哈~ # 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。如下图所示: |
|
来自: Four兄 > 《Python笔记》