一、实验目的
(1)掌握类的定义语法 (2)掌握面向对象程序设计的基本方法
二、实验环境
联网计算机一台/每人,内装Windows 7以上操作系统和安装Python 3.7集成开发环境IDLE。
三、实验内容
Sy8-1
创建一个学生类stu,属性包括姓名、性别和年龄以及爱好,并实例化对象stuA.
Sy8-2
利用继承多个父类的方法创建一个新的子类
Sy8-3
创建父类A,包含两个数据成员(属性)s1,n1,由父类A派生出子类B,包含两个数据成员s2,n2,再由子类B派生出孙类C,包含两个数据成员s3,n3.
四、实验步骤与结果
1. 新建文件夹并命名为学号-姓名-实验八。
2. 安装 Python 解释器Python 3.7 集成开发环境IDLE,并进入IDLE。
3. 依次输入自己编好的程序实验内容1-7的源程序,分别命名为sy8_1.py - sy8_3.py 并保存至已建好的文件夹中。
4. 检查已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时改正。
5. 运行程序并分析运行结果是否合理。在运行时要注意当输入不同的数据时所得结果是否正确,应测试两组以上数据,分别检查在不同情况下结果是否正确。
列出1-3题源程序清单并记录上机运行结果。
Sy8-1
创建一个学生类stu,属性包括姓名、性别和年龄以及爱好,并实例化对象stuA.
class stu(object):
def __init__(self,name,sex,age):
self.name=name
self.sex=sex
self.age=age
def __str__(self):
return '<姓名: %s(%c,%d岁)>' % (self.name,self.sex,self.age)
def hobby(self):
print('乒乓球')
stuA=stu('张三','男',19)
print(stuA)
stuA.hobby()
Sy8-2
利用继承多个父类的方法创建一个新的子类
class A:
def Fa(self):
if self.n>=60:
return '%s及格'%self.name
else:
return '%s不及格'%self.name
class B():
def Fb(self):
print('%s, 成绩是%d.' % (self.name,self.n))
class C(A,B):
def __init__(self,name,n):
self.name=name
self.n=n
n_1=C('Name1',82)
n_1.Fb()
print(n_1.Fa())
n_2=C('Name2',56)
n_2.Fb()
print(n_2.Fa())
Sy8-3
创建父类A,包含两个数据成员(属性)s1,n1,由父类A派生出子类B,包含两个数据成员s2,n2,再由子类B派生出孙类C,包含两个数据成员s3,n3.
class A: #父类
def __init__(self,s1,n1): #构造函数
self.s1=s1 #定义两个属性
self.n1=n1
def disp(self): #定义基类方法
print(self.s1,self.n1)
class B(A): #子类(派生类)
def __init__(self,s1,n1,s2,n2):
A.__init__(self,s1,n1) #调用父类构造函数
self.s2=s2 #子类新增两个属性
self.n2=n2
def disp(self): #定义子类(派生类)方法
A.disp(self) #调用父类(基类)方法
print(self.s2,self.n2)
class C(B): #孙类(由子类派生)
def __init__(self,s1,n1,s2,n2,s3,n3):
B.__init__(self,s1,n1,s2,n2) #调用子类构造函数
self.s3=s3 #孙类新增两个属性
self.n3=n3
def disp(self):
B.disp(self) #调用子类方法
print(self.s3,self.n3)
p1=A('A:abc',10) #分别创建父类、子类和孙类三个对象
p1.disp()
p2=B('B:abc',10,'def',20)
p2.disp()
p3=C('C:abc',10,'def',20,'ghi',30)
p3.disp()
五、总结
1. 实验过程中的问题及解决方法:
-
在类的属性定义和方法编写过程中,可能会出现语法错误,通过仔细检查代码语法结构,参考 Python 语法文档和示例,解决了语法错误问题。
-
在继承多个父类以及多层级继承时,可能出现属性和方法的访问、调用混乱的问题。通过深入理解继承的原理和作用域规则,明确各个类之间的层次关系和属性、方法的传递与覆盖规则,解决了继承过程中的混乱问题。
-
在实例化对象并访问属性和方法时,可能会出现参数传递错误或属性、方法调用错误的问题。通过仔细检查实例化的参数和调用的方法名及参数,确保了对象的正确使用。
2. 实验收获
-
通过本次实验,深入理解了类的定义语法,能够准确地定义类的属性和方法,明确了类的封装特性和作用。
-
掌握了面向对象程序设计的基本方法,包括类的实例化、属性访问和方法调用等操作,学会了如何通过对象来实现程序的功能。
-
深入理解了继承的概念和作用,能够熟练运用单继承、多继承以及多层级继承来构建类的层次结构,实现代码的复用和扩展。
-
通过实际编写代码和调试,提高了问题解决能力和编程逻辑思维能力,为进一步深入学习和应用面向对象编程技术奠定了坚实的基础。