Python3 【对象编程】水平考试:精选试题和答案
Python 面向对象编程测试试卷
总分:100 分
考试时间:90 分钟
一、选择题(15题 × 2分,共30分)
-
Python 中类的构造函数是?
A.__init__
B.__new__
C.__start__
D.__construct__
答案:A -
以下哪个是私有属性的命名方式?
A.name
B._name
C.__name
D.name_
答案:C -
子类继承父类的语法是?
A.class Child(Parent)
B.class Parent(Child)
C.class Child: Parent
D.class Parent: Child
答案:A -
以下代码的输出是什么?
class A: def show(self): print("A") class B(A): def show(self): print("B") obj = B() obj.show()
A.
A
B.B
C. 报错
D. 无输出
答案:B -
静态方法的装饰器是?
A.@staticmethod
B.@classmethod
C.@property
D.@abstractmethod
答案:A -
以下代码的错误原因是?
class Dog: def __init__(self, name): self.name = name def bark(): print("汪!") dog = Dog("旺财") dog.bark()
A. 缺少
self
参数
B. 未定义name
C. 构造函数错误
D. 语法错误
答案:A -
多态的实现依赖于?
A. 继承和方法重写
B. 封装
C. 运算符重载
D. 装饰器
答案:A -
以下代码的输出是?
class MyClass: count = 0 def __init__(self): MyClass.count += 1 a = MyClass() b = MyClass() print(MyClass.count)
A. 0
B. 1
C. 2
D. 报错
答案:C -
以下哪个方法用于字符串表示对象?
A.__repr__
B.__str__
C.__format__
D.__print__
答案:B -
以下代码的错误是?
class A: def __init__(self, x): self.x = x class B(A): def __init__(self, y): self.y = y obj = B(5) print(obj.x)
A. 未调用父类
__init__
B. 变量未定义
C. 语法错误
D. 无错误
答案:A -
以下代码的输出是?
class Vector: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): return Vector(self.x + other.x, self.y + other.y) v1 = Vector(1, 2) v2 = Vector(3, 4) v3 = v1 + v2 print(v3.x)
A. 1
B. 3
C. 4
D. 报错(未定义__str__
)
答案:C -
抽象类的装饰器是?
A.@abstract
B.@abstractmethod
C.@staticmethod
D.@classmethod
答案:B -
以下代码的输出是?
class Parent: def greet(self): print("Parent") class Child(Parent): def greet(self): super().greet() print("Child") obj = Child() obj.greet()
A.
Parent
B.Child
C.Parent\nChild
D. 报错
答案:C -
以下代码的错误是?
class MyClass: @property def value(self): return self._value obj = MyClass() obj.value = 10
A. 未定义
_value
B. 缺少@value.setter
C. 语法错误
D. 无错误
答案:B -
单例模式的目的是?
A. 限制类只能创建一个实例
B. 隐藏私有属性
C. 实现多态
D. 动态扩展功能
答案:A
二、填空题(10题 × 3分,共30分)
-
在 Python 中,用于初始化对象的方法是
______
。
答案:__init__
-
定义类方法时,装饰器是
______
。
答案:@classmethod
-
类的私有属性命名规则是添加
______
前缀。
答案:双下划线(__
) -
继承多个父类时,方法解析顺序由
______
决定。
答案:MRO(Method Resolution Order) -
以下代码的输出是:
class A: def __init__(self): self.x = 1 class B(A): def __init__(self): super().__init__() self.y = 2 obj = B() print(obj.x + obj.y)
答案:3
-
运算符
+
重载的方法是______
。
答案:__add__
-
动态绑定实例方法需要使用的模块是
______
。
答案:types.MethodType
-
上下文管理器的两个特殊方法是
______
和______
。
答案:__enter__
、__exit__
-
以下代码的输出是:
class MyClass: def __getattr__(self, name): return f"{name} 不存在" obj = MyClass() print(obj.age)
答案:
age 不存在
-
实现抽象类的模块是
______
。
答案:abc
(或from abc import ABC, abstractmethod
)
三、编程题(5题 × 8分,共40分)
-
定义一个
Student
类,包含属性name
和score
,并实现一个方法get_grade
,返回“优秀”(≥90)、“及格”(≥60)或“不及格”。class Student: def __init__(self, name, score): self.name = name self.score = score def get_grade(self): if self.score >= 90: return "优秀" elif self.score >= 60: return "及格" else: return "不及格" # 测试 s = Student("Alice", 85) print(s.get_grade()) # 输出: 及格
-
实现一个单例模式的类
Singleton
。class Singleton: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance # 测试 a = Singleton() b = Singleton() print(a is b) # 输出: True
-
定义一个
BankAccount
类,包含私有属性__balance
,并实现存款和取款方法。class BankAccount: def __init__(self): self.__balance = 0 def deposit(self, amount): self.__balance += amount def withdraw(self, amount): if self.__balance >= amount: self.__balance -= amount else: print("余额不足") def get_balance(self): return self.__balance # 测试 acc = BankAccount() acc.deposit(100) acc.withdraw(30) print(acc.get_balance()) # 输出: 70
-
定义一个
Shape
抽象类,要求子类必须实现area
方法。from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 # 测试 c = Circle(3) print(c.area()) # 输出: 28.26
-
定义一个
Vector
类,支持向量加法(+
)和向量长度计算(__len__
)。class Vector: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): return Vector(self.x + other.x, self.y + other.y) def __len__(self): return int((self.x**2 + self.y**2)**0.5) # 测试 v1 = Vector(3, 4) print(len(v1)) # 输出: 5