复习习题集仅为大二年级非计算机专业学生python面向对象考试复习使用(未完结)
页码取自Dusty Phillips的Python 3 面向对象编程(第二版)
1.以下哪个不是面向对象程序设计的特点?( C )
A.多态
B.继承
C.嵌套
D.封装
解析:面向对象程序设计有4个主要特点,分别是:抽象、封装、继承、多态。
2.以下关于面向对象程序设计中的对象的说法,正确的是?( C )
A.对象是属性与数据的集合
B.必须是在现实中存在的实体才能被看作对象
C.一个对象可以包含其他对象
D.在python中,浮点数float是组成对象的基本元素,float变量不是对象
解析:类是属性与行为的集合;对象是数据与相关行为的集合,是类的具体实例。显然,答案选C。P3 对象和类
3.以下关于类与对象的说法,错误的是?( B )
A.python中一切变量都是变量,类也是一种对象
B.子类对象不能被当作父类对象使用
C.类是对对象的抽象
D.对象是类的实例
解析:子类对象赋值给父类对象即可将子类当作父类使用。P13 继承
4.python里面如何将一个对象的属性定义为私有属性?( B )
A.public:self.xxx = 123
B.self.__xxx = 123
C.private:self.xxx = 123
D.private{self.xxx = 123}
解析:只需要在属性前加上双下划线。P44 谁可以访问我的数据
5.以下关于继承的说法,错误的是?( D )
A.继承可以实现代码复用,减少重复的代码
B.python中通过在定义类的时候,指定父类,从而实现继承
C.子类可以覆盖父类的方法和属性,子类也可以调用父类的方法
D.被继承的父类拥有子类的所有属性与方法,父类可以当作子类使用
解析:减少冗杂代码是种核心素养!将父类名放入基本类的类名后及冒号之前的括号内即可实现继承。子类继承父类的所有的非私有的方法和属性。P58 基本的继承
6.以下关于多态的说法,错误的是?( A )
A.python可以定义不同类型的参数,并创建多个同名的方法,从而实现多态
B.python可以让方法接受不同数量的参数,从而实现多态
C.python可以让方法接受不同关键字的参数,从而实现多态
D.python可以在方法内判断参数的类型,从而实现多态
解析:使用继承、给函数传递不同的参数可实现多态 。P74 多态
7.以下说法错误的是?( B )
A.隐藏对象具体实现或功能细节的过程,被称为信息隐藏
B.被封装的数据一定是隐藏的
C.设计公共接口的时候要谨慎,因为公共接口一旦定义,很难更改
D.抽象是对于对象的高度概括,也是信息隐藏的一种
8.有这样一段程序:
class MyClass():
def __init__(self):
print(“Hello”, end=” “)
def __repr__(self):
return “Hello World”
if __name__ == “__main__”:
obj = MyClass()
print(obj)
则程序最后的输出为?( D )
A.Hello
B.World
C.Hello World
D.Hello Hello World
解析:__init__方法中输出”Hello“,end=” “不换行,__repr__()方法,输入该方法的返回值(必须是字符串),即”Hello World“,所以最终输出的是”Hello Hello World“。其他常用魔术方法可:Python常用魔术方法 – 知乎 (zhihu.com)
9.如何在定义一个类时,定义对象的属性?( C )
A.将定义写在类名的下面
B.将定义写在_init_方法中
C.将定义写在__init__方法中
D.将定义写在类名后面的括号中
解析:初始化方法__init__ P32 初始化对象
10.有一个类的定义如下:
class Book():
def read(self, reader_name):
print(f”读者{reader_name}, 欢迎读书”)
有一个该类的实例,叫做mybook,类外如何正确调用read方法?( B )
A.Book.read(“小明”)
B.mybook.read(“小明”)
C.mybook.read(mybook, “小明”)
D.mybook.read(self, “小明”)
11.在sys.path对应的路径下,有以下目录结构:
|–utils(文件夹)
| |–__init__.py
| |–database.py
|
|–bottle.py
以下说法正确的是?( C )
A.可以通过import database.py导入database.py文件
B.bott1e.py和database.py位于同一个包
C.可以通过from utils import database来导入database.py文件
D.可以通过import uti1s.bott1e来导入bottle.py文件
解析:一个 .py 文件可以称为模块,包含了 __init__.py
文件的称为包,可以使用 import <>
或 from <> import <>
这两种语法。A项应为import utils.database.py。P39 绝对导入
12.以下说法正确的是?( D )
A.对象里面_一个下划线开头的属性是隐藏属性,在类外无法访问
B.对象里面__两个下划线开头的属性是隐藏属性,在类外无法访问
C.对象的属性一定要定义成隐藏属性,只暴露方法来给类外使用
D.在对象的类以外使用对象时,下划线开头的属性不建议使用
13.关于继承,以下说法正确的是?( )
A.子类只能继承父类的非隐藏属性和方法
B.python里面所有的类都继承自object
C.python使用extends关键字定义类的继承关系
D.python允许多重继承,但是不允许菱形继承
14.为了继承父类的属性和方法,以下做法错误的是?( D )
A.在定义类时申明继承父类
B.在初始化方法中调用父类的初始化方法
C.重写父类方法时,在方法中调用父类的方法
D.重新定义父类所有的方法,用pass作为方法内容
解析:初始化方法中super调用父类,D项中的做法没必要重新父类所有方法,如果有必要也不需要pass。P62重写和super
15.关于异常,以下说法正确的是?( A )
A.在方法中间抛出异常,抛出异常之后的代码不会继续执行
B.异常是python内置的类,无法被开发者定义的类继承
C.网络操作和文件操作容易产生异常,要求必须捕获异常,否则程序不能运行
D.python中抛出异常的关键字是throw
解析:A项可以自行试试,五行代码得出结果;对于B项,python中所有的类都可以被继承;C项中的必须有点那啥,不能运行倒确实;D项,应该是“raise”关键字,throw又是java的关键字,上面的public和private也是。P99 异常的作用
16.给一个对象添加属性,错误的做法是?( B )
A.使用setattr方法直接给对象添加属性
B.定义在class代码块里面,如:
class obj():
XXX=123
C.使用@property装饰器将一个方法定义成属性
D.在类的初始化方法中,赋值给self.xxx,如:
class obj():
def __init__(self):
self.xxx = 123
解析:A项,setattr(object, name, value),通过语法显而易见做法是正确的;B项,self.xxx = ###如D项;C项,P133 装饰器——另一种创建属性的方法。
17.元组是python内置的一种数据类型,以下说法错误的是?( D )
A.使用for循环可以遍历元组对象
B.可以定义方法接受不定个数的参数,实际传入方法的参数将会是一个元组
C.有元组t=(1,2,3),t[0]=3的赋值操作会出错
D.有元组t=([1,2,3],[4,5,6]),t[0][0]=3的赋值操作会出错
解析:C项,元组中的元素值不允许修改;D项,并不会,此元组中的元素是两个列表(使用[]),赋值语句t[0][0]指向第一个元素列表的第一个值,即1,此时变的是第一个列表的元素,而不应该是元组的元素,元组的指向是不变的。P155 元组和命名元组
18.关于python中的字典类型,以下说法错误的是?( D )
A.字典是表示键与值之间一一对应关系的一种数据类型
B.使用字典可以根据键找到对应的值
C.使用for循环遍历的是字典的键
D.使用for循环遍历的是字典的值
解析:存储的对象被称为值,作为索引的对象被称为键,for循环也就是指针变动,遍历的是索引对象。P159 字典
19.关于python中的列表类型,以下说法正确的是?( A )
A.使用内置的len函数可以得到列表的长度
B.列表里面的元素必须是相同类型的
C.列表的长度是固定的,超过列表容量将出错
D.通过下标访问非空列表时,下标不能为负数
解析:B项,不用跟python谈类型(至少现在不需要);C项,python中,列表是动态的,可以随意添加和删除,当然在索引的时候超出范围会抛出异常;D项,反向索引:???P166 列表 P195 Python内置函数
20.python里面有许多魔术方法,关于它们的功能描述错误的是?( B )
A.__enter__方法:用于上下文管理器,在进入上下文时调用
B.__exit__方法:在程序退出时调用,用于执行释放已打开的资源等操作
C.__len__方法:可以使用内置len函数求对象的长度
D.__getitem__方法:通过下标访问对象的内容时会调用该方法
解析:Python常用魔术方法 – 知乎 (zhihu.com)
21.python中所有对象的共同父类是(object)
解析:了解一下的是在py2中使用 super 进行父类构造调用时必须使用 object 继承的新式类。
22.定义一个类时,初始化方法的名称是(__init__)
解析:但凡写过的人都知道吧。
23.要捕获一段代码中可能出现的异常,可以使用(try/excpt)关键字
解析:P101 处理异常
24.一行代码给a与b赋值(即元组解包):(a,b) = (1,2)
解析:元组解包有一对一解包,即一一对应关系;还可以用下划线_表示不需要的元素,使用*捕获全部元素等方法。
25.阅读以下程序:
class Point(object):
def __init__(self, x, y)
self.x = x
self.y = y
def draw(self):
print(f”{self.x},{self.y}”)
class MyPoint(Point):
def __init__(self, base):
super().__init__(base, base)
if __name__==”__main__”
p = MyPoint(16)
p.draw()
程序的输出是(16, 16)
解析:传给MyPoint一个参数“16”,base获得“16”,super方法继承Point父类的初始化方法__init__,Point类初始化方法里x, y分别获得“16”这个参数,调用draw()方法即输出“16,16”