目录
1.什么是继承?继承的目的?
继承:
指的是新建类的方法, 新建的类称之为子类或者派生类,
子类继承的类叫做父类,也称之为基类或超类.
目的:
减少代码冗余,(减少重复代码)。
2.python与期他语言的继承区别是什么?
在python中,一个子类可以继承多个父类。
其他语言:只能一个子类继承一个父类。
3.如何寻找继承关系?
想要寻找继承关系时,首先要'抽象',再继承。
4.继承背景下对象属性的查找顺序是什么?
1.对象查找属性时会先从对象的名称空间中查找。
2.若对象中没有时,去类中查找。
3.若当前是子类,并且没有对象找的属性时,则会去父类中查找。
注意:对象查找属性时,若子类中有对象,不管你父类有没有,以子类为主。
5.什么是派生?如何重用父类的属性并派生?两种方式
派生
:派生指的是子类继承父类的属性,并且派生出新的属性.
方式一
:直接通过 父类.(调用)init,把__init__当做普通函数使用,传入对象与继承的属性.
方式二
: super是一个特殊的类,在子类中调用super()会得到一个特殊的对象, 通过"."指向的是父类的名称空间.
6.什么是新式类与经典类?
新式类:
继承object的类都称之为新式类.
python3中,子类不继承自定义的类,默认继承 object.
经典类:
在 python2 中,但凡没有继承 object 的类都是经典类。
7.钻石继承下,经典类与新式类属性的查找顺序是什么?
- 广度 新式类 :直接一次找到低,找到 object 拿到A 在返回,找E,不找object。
- 深度 经典类 :找D时,不着objiect,找E时,直到找到object结束。
8.下面这段代码的输出结果将是什么?请解释。
8.下面这段代码的输出结果将是什么?请解释。
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print(Parent.x, Child1.x, Child2.x)
Child1.x = 2
print(Parent.x, Child1.x, Child2.x)
Parent.x = 3
print(Parent.x, Child1.x, Child2.x)
# 1 1 1
# 1 2 1
# 3 2 3
因为child1和child2是子类,继承了父类,当父类 x = 1时
child1 和 child2 继承了父类。值:1 1 1
当 child1.x = 2 时,child1为子类,对象查找属性时,若子类中有对象,不管你父类有没有,以子类为主。child.X是父类,值不变还是 1,child2.x继承了父类的值为1。 值: 1 2 1
当 Parent.x = 3时 ,覆盖掉Parent的值。根据类的查找方法,子类中找到则,则不找父类,child1.x子类的值为2。因而child2.x继承了父类的值,预知 Parent 已被覆盖值为3. 值: 3 2 3
9.下述代码新式类与新式类的查找顺序是什么?
9.下述代码新式类与新式类的查找顺序是什么?
class A(object):
def test(self):
print('from A')
class B(A):
def test(self):
print('from B')
class C(A):
def test(self):
print('from C')
class D(B):
def test(self):
print('from D')
class E(C):
def test(self):
print('from E')
class F(D, E):
def test(self):
print('from F')
pass
# python3中校验: F - D -B - E -C -A -object
XX --> XX --> ...
# python2中校验: F - D - B -A - E -C
1.什么是组合?为什么要使用组合?
组合:
指的是一个对象中,包含另一个或多个对象。
作用:
减少代码的冗余
2.什么是封装?
可以将一堆属性和方法,封装到对象中。
可以通过 “对象.” 的方式获取属性或方法。
3.什么是访问限制机制?
访问机制:
凡是在类内部定义的属性或方法,以__开头的属性或方法名,都会被限制,外部不能 “直接访问” 该属性原型。
4.访问限制机制的优点?
优点:
将一些隐私的数据,隐藏起来,不让外部轻易获取。
对重要数据获取的逻辑更加严谨, 进而保证了数据的安全.
5.什么是property?为什么要使用property?
property:
是一个python内置的装饰器,可以装饰在"类内部的方法"上
如何使用:
在某些场景下,调用的方法只是用来获取计算后的某个值。
6.练习题:
'''
- 需求:
- 老师对象:
- 特征:
# 老师信息都为隐私数据,需要私有化
- 1.姓名
- 2.年龄
- 3.性别
- 4.薪资
- 5.等级
- 6.身份证ID
# 课程列表无需私有化
- 7.课程列表
- 技能:
- 1.查看老师信息接口:
- 直接打印即可
- 2.获取老师身份证ID:
- 该方法将 动词设置为 名词的调用方式
- 3.添加课程:
- 该功能为老师课程列表添加课程对象
- 4.删除指定课程
- 该功能删除老师课程列表中的课程对象
- 5.修改课程信息
- 修改老师课程课表中课程的
- 6.打印所有课程
- 打印老师课程列表中所有课程的信息
- 遍历调用所有课程对象中打印课程技能
- 课程对象:
- 特征:
- 1.课程名称
- 2.课程价格
- 3.课程周期
- 技能:
- 1.可以打印课程信息
'''