目录
(2)为二次方程式ax^2+bx+c=0 设计一个名为Equation的类,这个类包括:
(3)设计一个描述自由落体运动的类,要求能获得任意时刻的速度及位移,并进行测试。已知重力加速度为9.8m/s^2。
1.选择题:
1.A 2.A 3.D 4.C 5.D 6.A 7.C 8.B 9.C 10.D
部分题的解析:
6.重写不是面向编程的基本特征之一,重写通常是子类可以重写父类的方法以改变其行为,是继承的一部分
8.类方法:@classmethod
静态方法:@staticmethod
10.这段代码有两个用test命名的函数,在python中,方法的重载并不像其他语言那样直接支持,因为python会覆盖先前定义的同名方法,所以只有最后一个定义的test方法会被保留,而前一个会被覆盖,在python中,self是用来指代当前对象实例的参数,它需要显式地传递给每个类的方法。所以在定义类的方法时,self参数时必须的,不能省略,在定义类方法是,self时第一个参数,它表示当前对象实例的引用。当你调用类的方法时,python会自动将当前对象实例作为第一个参数传递给该方法,因此你在方法内部可以通过self来访问该对象的属性和方法
2.简答题:
(1)什么是对象?什么是类?类与对象的关系是什么?
对象:对应客观世界的事物 类:具有相同或相似性质的对象的抽象就是类
类与对象的关系:对象的抽象就是类,类的具体化就是对象。
(2)面向对象语言有哪三个特性?
1.封装性 2.继承性 3多态性
(3)什么是面向对象编程的继承性?有什么优点?
继承性:描述类之间的关系,在这种关系中,一个类共享了一个或多个其他类定义的数据和操作
优点:增强了代码的复用性,提高了开发效率而且为程序的修改补充提供了便利。
(4)类变量与成员变量的区别是什么?
类变量:
-
类变量是定义在类中,但在所有实例之外的变量。它们属于整个类,而不属于类的特定实例。
-
类变量可以通过类名直接访问,也可以通过类的任何一个实例来访问。所有该类的实例都共享同一个类变量的值。
-
类变量通常用于表示该类的特性或共享的状态,比如全局计算器、常量值等。
成员变量:
成员变量是定义在类中,但在方法中使用self关键字声明的变量。每个实例都有自己的一组成员变量,它们属于实例。
成员变量在类的每个实例之间是独立的,每个实例可以有不同的成员变量。
成员变量通常用于表示实例的特定状态或属性
区别:类变量是属于整个类的,成员变量是属于类的实例的,类变量在整个类中共享,而成员变量则是每个实例独有的。
(5)构造方法和析构方法名字都是什么?
构造方法的名字: __init__() 析构方法的名字: __del__()
(6)构造方法的作用是什么?它与成员方法有什么不同?
构造方法的作用:一般用于为对象数据成员设置初始值或进行其他必要的初始化工作,如果未定义构造方法,python将提供一个默认的构造方法。
不同:构造方法用于初始化对象的状态,在创建对象时自动调用;而成员方法则是定义类的行为或操作的普通方法,它们可以被对象调用来实现特定的功能。
(7)请列举出五种重载的运算符及其对应的方法。
x+y,x+=y :__add__ x-y,x-=y :__sub__ x/y,x/=y :__div__ x*y,x*=y :__mul__ x%y,x%=y :__mod__
3.阅读程序
运行下面的程序,输出结果是什么?说明程序的执行过程。
class MyClass: value=100 def function1(self): print("self.value=",self.value) print("MyClass.value=",MyClass.value) class UClass(MyClass): value=200 def function1(self): super().function1() print("super().value=",super().value) print("self.value=",self.value) print("UClass.value=",UClass.value) cc=UClass() cc.function1() print("用对象访问,cc.value=",cc.value) print("用类访问,UClass.value=",UClass.value)#输出结果: self.value=100 MyClass.value=100 super().value=100 self.value=200 UClass.value=200 用对象访问,cc.value=200 用类访问,UClass.value=200 ''' cc=UClass() #只是在内存中分配了一个UClass类的实例,并将其赋给变量cc. cc.function1() #这个是调用UClass类中的function1函数打印上面的值. super().value #访问父类MyClass中的value属性.由于super()返回的是代理对象,因此此时获取的是父类中的值。 我觉的要注意的就这些'''
4.编程题:
(1)设计一个Group类,该类包括:一个数据成员score(每个学生的分数)、两个类成员total(班级的总分)和 count (班级的人数)。成员方法setScore0用于设置分数,成员方法sum(用于累计总分,类方法averageO用于求平均值。交互式输人某组学生的成绩,显示该组的总分和平均分。
class Group: total=0 #类成员变量,记录班级的总分 count=0 #类成员变量,记录班级人数 def __init__(self): self.score=0 #每个学生的分数 def setScore(self,score): self.score=score Group.total+=score #累加班级总分 Group.count+=1 #累加班级人数 @classmethod def sum(cls): return cls.total #返回班级总分 @classmethod def average(cls): if cls.count==0: return 0 else: return cls.total/cls.count #返回平均分 @staticmethod def input_scores(group): while True: try: score=float(input("请输入学生成绩(输入负数结束输入):")) if score < 0: break group.setScore(score) except ValueError: print("请输入有效的成绩(数字)!") #主程序 group=Group() #创建Group类的实例 group.input_scores(group) #调用函数输入成绩 #显示该组的总分和平均分 print("该组的总分为:",Group.sum()) print("该组的平均分:",Group.average())
(2)为二次方程式ax^2+bx+c=0 设计一个名为Equation的类,这个类包括:
-
代表3个系数的成员变量a、b、c;
-
一个参数为a、b、c的构造方法;
-
一个名为getDiscrimimant()的方法返回判别式的值;
-
一个名为getRoot1()和getRoot2()的方法返回等式的两个根,如果判别式为负,这些方法返回0。
import math class Equation: def __init__(self, a, b, c): self.a = a self.b = b self.c = c def getDiscriminant(self): return self.b**2 - 4 * self.a * self.c def getRoot1(self): discriminant = self.getDiscriminant() if discriminant < 0: return 0 else: return (-self.b + math.sqrt(discriminant)) / (2 * self.a) def getRoot2(self): discriminant = self.getDiscriminant() if discriminant < 0: return 0 else: return (-self.b - math.sqrt(discriminant)) / (2 * self.a) # 示例用法 a=int(input("a=")) b=int(input("b=")) c=int(input("c=")) equation = Equation(a, b, c) print("判别式:", equation.getDiscriminant()) print("第一个根:", equation.getRoot1()) print("第二个根:", equation.getRoot2())
(3)设计一个描述自由落体运动的类,要求能获得任意时刻的速度及位移,并进行测试。已知重力加速度为9.8m/s^2。
class FreeFall: def __init__(self,gravity=9.8): self.gravity=gravity def velocity(self,time): return self.gravity*time def displacement(self,time): return (1/2)*self.gravity*time**2 #主程序 time=float(input("(t为整数)t:")) free=FreeFall(time) print(f"{time}时刻的速度是",free.velocity(time)) print(f"{time}时刻的位移是",free.displacement(time))