Python 实验八 面向对象编程

一、实验目的

(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. 实验收获

  • 通过本次实验,深入理解了类的定义语法,能够准确地定义类的属性和方法,明确了类的封装特性和作用。

  • 掌握了面向对象程序设计的基本方法,包括类的实例化、属性访问和方法调用等操作,学会了如何通过对象来实现程序的功能。

  • 深入理解了继承的概念和作用,能够熟练运用单继承、多继承以及多层级继承来构建类的层次结构,实现代码的复用和扩展。

  • 通过实际编写代码和调试,提高了问题解决能力和编程逻辑思维能力,为进一步深入学习和应用面向对象编程技术奠定了坚实的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值