浙江大学python程序设计(陈春晖、翁恺、季江民)习题答案-第八章
一、判断题
1.创建对象是通过调用构造方法完成的。 正确
 2.位于对象中的方法称为实例变量。 错误
 3.Python方法定义的第一个参数是this。 错误
 4.一个对象只能有一个实例变量。 错误
 5.在Python类中,构造方法的名称为__init__。 正确
 6.从类定义之外直接访问实例变量不是一个好的程序设计风格。正确
 7.在类定义中隐藏对象的细节称为实例化。 错误
 8.父类(超类)从子类继承方法。 错误
 9. Python中一切内容都可以称为对象。 正确
 10.定义类时,所有实例方法的第一个参数用来表示对象本身,在类的外部通过对类和对象名来调用实例方法时不需要为该参数传值。 正确
 11.在面向对象程序设计中,函数和方法是完全一样的,都必须为所有参数进行传值。 错误
 12.对于Python类中的私有成员,可以通过“对象名.__类名__私有成员名”的方式来访问。 错误
 13.在Python中定义类时,实例方法的第一个参数名称必须是self。正确
 14.在Python中定义类时实例方法的第一个参数名称不管是什么,都表示对象自身。 错误
 15.定义类时,在一个方法前面使用 @classmethod 进行修饰,则该方法属于类方法。 正确
 16.定义类时,在一个方法前面使用 @staticmethod 进行修饰,则该方法属于静态方法。 正确
 17.在Python中可以为自定义类的对象动态增加新成员。正确
选择题
1.Python保留字 B 开始了类定义
 A. def
 B. class
 C. object
 D. init
2.在类中,具有四个形式参数的方法通常在调用时有 B 个实际参数。
 A. 3
 B. 4
 C. 5
 D. 不确定
3.在类的方法定义中,可以通过表达式 B 访问实例变量 x。
 A. x
 B. self.x
 C. self[x]
 D. this.x
4.定义一个类的“私有”方法,Python的惯例是使用 B 开始方法的名称。
 A.“private”
 B.两个下划线(__)
 C.井号(#)
 D.减号(-)
5.将细节隐藏在类定义中,术语称为 D 。
 A.虚函数
 B.子类化
 C.继承
 D.封装
6.以下 C 不是面向对象程序设计的基本特征之一。
 A.继承
 B.多态
 C.抽象
 D.封装
7.分析下面的代码 D
class A: def __init__(self,s): self.s = sdef print(self):print(s)a = A("Welcome")
a. print()
A.程序有错误,因为类 A 中没有构造方法。
 B.程序有错误,因为类 A 中有一个命名的print方法print(self,s)。
 C.程序有错误,因为类 A 中有一个命名的print方法print(s)。
 D.如果方法 print(s) 改成 print(self.s),程序能够正常运行。
8.分析下面的代码 D
class A:def __init__(self):self.X = 1self.__Y = 1def getY(self):return self.__Ya = A()
print(a.X)
A.程序有错误,因为 x 是私有的,不能在类之外访问。
 B.程序有错误,因为 y 是私有的,不能在类之外访问。
 C.程序有错误,不能使用 y 作为变量名。
 D.程序运行结果为1。
 E.程序运行结果为0。
9.分析下面的代码 B
class A:def __init__(self):self.X = 1self.__Y = 1def getY(self):return self.__Ya = A()
print(a.__Y)
A.程序有错误,因为 x 是私有的,不能在类之外访问。
 B.程序有错误,因为 y 是私有的,不能在类之外访问。
 C.程序有错误,不能使用 __y 作为变量名。
 D.程序运行结果为1。
 E.程序运行结果为0。
10.分析下面代码 D
class A:def __init__(self):self.X = 1self.__Y = 1def getY(self):return self.__Ya = A()
a.__Y = 45
print(a.getY())
A.程序有错误,因为x是私有的,不能在类之外访问。
 B.程序有错误,因为y是私有的,不能在类之外访间。
 C.程序有错误,不能使用y作为变量名。
 D.程序运行结果为1。
 E.程序运行结果为45。
11.下面代码段运行的结果是 B
def main():myCount = Count()times = 0for i in range(0, 100):increment(myCount, times)print("myCount. count =", myCount.count, "times=", times)def increment(c, times):c.count += 1times += 1class Count:def __init__(self):self.count = 0main()
A.count值为101,times值为0
 B.count值为100,times值为0
 C.count值为100,times值为100
 D.count值为101,times值为101
12.下面代码段运行的结果是 C
A. 0 0
 B. 0 1
 C. 1 2
 D. 0 2
 E. 2 1
13.下面代码段运行的结果是 C
class A:def __new__(self):self.__init__(self)print("A's __new__() invoked")def __init__(self):print("A's __init__() invoked")class B(A):def __new__(self):print("B's __new__() invoked")def __init__(self):print("B's __init__() invoked")def main():b = B()a = A()main()
A.B's __new__() invoked A's __init__() invoked
 B. B's __new__() invoked A's __new__() invoked
 C.B's __new__() invoked A's __init__() invoked A's __new__() invoked
 D. A's __init__() invoked A's __new__() invoked
14.下面代码段运行的结果是 B 。
class A:def __init__(self):self.i = 1def m(self):self.i = 10class B(A):def m(self):self.i += 1return self.idef main():b = B()print(b.m())main()
A.1
 B.2
 C.10
 D.3
