一、实验目的
1.理解面向对象程序设计的特点。
2.掌握python 中类的定义,类中方法和属性的定义及引用。
3. 掌握类的继承和多态
4. 掌握类中运算符的重载
二、实验环境
多媒体计算机 Windows 操作系统 Python3.7
三、实验内容及要求
(一). 定义一个集合类,用于实现集合的主要运算。
(二). 定义一个银行卡类,用于提供相关的开户、存款、取款、转帐、查询等操作。
(三). 继承6.3节例6-1中的Person类生成Student类,填写新的函数用来设置学生专业,然后生成该类对象并显示信息。
(四). 用于定义一个shape类,包含计算面积和体积的方法:然后定义扩展的子类,如球、圆柱体、圆锥体等,并对类进行测试。
四、实验相关步骤及代码、结果
(一).编写程序,正确运行并截图显示结果。
class aggregate:
def cha(self,set1,set2):
return set1-set2 #集合的差
def bing(self,set1,set2):
return set1|set2 #集合的并
def jiao(self,set1,set2):
return set1&set2 #集合的交
def yihuo(self,set1,set2):
return set1^set2 #集合的异或
def baohan(self,set1,set2):
return set1<set2 #集合的包含
if __name__=='__main__':
s1={1,2,3,4} #方法一
s2=set([2,3,4,5]) #方法二
print(s1,s2)
a=aggregate()
print(a.cha(s1,s2))
print(a.bing(s1,s2))
print(a.jiao(s1,s2))
print(a.yihuo(s1,s2))
print(a.baohan(s1,s2))
(二) 编写程序,正确运行并截图显示结果
class BankCard:
def __init__(self,ID,CNY):
self.Card_ID = ID
self.__Card_CNY = CNY
def Query(self):
return self.__Card_CNY
def SaveCNY(self,Save):
self.__Card_CNY += Save
def Withdrawal(self,Draw):
self.__Card_CNY -= int(Draw)
def Transfer(self,Other_ID,TranCNY):
self.__Card_CNY -= TranCNY
def __str__(self):
return '卡号'+self.Card_ID + '卡内人民币余额:' + str(BankCard.Query(self))
def success(Card1):
print("\n恭喜你操作成功!")
print(Card1)
def main():
while 1:
print('\n请选择功能:\n1.开户\n2.存款\n3.取款\n4.查询\n5.转账\n0.退出')
chooce = int(input())
if (chooce == 0):
print("Bye")
exit(0)
elif (chooce == 1):
CardID = input("请输入卡号:")
CNY = int(input("请输入预存金额"))
Card1 = BankCard(CardID,CNY)
success(Card1)
elif (chooce == 2):
SaveCNY = int(input("请输入存款金额:"))
Card1.SaveCNY(SaveCNY)
elif (chooce == 3):
Withdrawal = int(input("请输入取款金额:"))
Card1.Withdrawal(Withdrawal)
success(Card1)
elif (chooce == 4):
print(Card1)
elif (chooce == 5):
Other_ID = input("请输入对方卡号:")
TranCNY = int(input("请输入转账金额:"))
Card1.Transfer(Other_ID,TranCNY)
success(Card1)
main()
(三).编写程序,正确运行并截图显示结果。
class Person(object): #基类必须继承于object,否则在派生类中将无法使用super()函数
def __init__(self, name = '', age = 20, sex = 'man'):
self.setName(name)
self.setAge(age)
self.setSex(sex)
def setName(self, name):
if not isinstance(name,str):
print('name must be string.')
return
self.__name = name
def setAge(self, age):
if not isinstance(age,int):
print('age must be integer.')
return
self.__age = age
def setSex(self, sex):
if sex != 'man' and sex != 'woman':
print('sex must be "man" or "woman"')
return
self.__sex = sex
def show(self):
print(self.__name)
print(self.__age)
print(self.__sex)
class Student(Person):
def __init__(self, name='', age = 30, sex = 'man', major = 'Computer'):
#调用基类构造方法初始化基类的私有数据成员
super(Student, self).__init__(name, age, sex)
self.setMajor(major) #初始化派生类的数据成员
def setMajor(self, major):
if not isinstance(major, str):
print('major must be a string.')
return
self.__major = major
def show(self):
super(Student, self).show()
print(self.__major)
if __name__ =='__main__':
zhangsan = Person('Zhi Duoxing736', 19, 'man')
zhangsan.show()
lisi = Student('Duoxing736',16, 'man', 'Math')
lisi.show()
(四).编写程序,正确运行并截图显示结果。
'''
首先需要了解的是一个基类,abc.ABCMeta,这是用于实现抽象类的一个基础类。
关于抽象方法的用法。在相应的方法之前一行加上@abstractmethod之后,
从新的一行开始定义相应的方法。实现的方法就是一个抽象的方法,
有点像Java中的接口。子类继承之后,如果需要用到的这个方法则必须用新的方法将其实现。
'''
import math
from abc import ABCMeta,abstractmethod
class Shape:
metaclass=ABCMeta
__count=0
def __init__(self,name):
self.__name=name
Shape.__count=Shape.__count+1
def __str__(self):
return '图形是:'+self.__name+','
@classmethod
def getCount(cls):
return cls.__count
@abstractmethod
def area(self):
return
@abstractmethod
def cir(self):
return
class Triangle(Shape):
def __init__(self,a,b,c):
super(Triangle, self).__init__('三角形')
self.a=a
self.b=b
self.c=c
def cir(self):
return self.c+self.a+self.b
def area(self):
s=(self.a+self.b+self.c)/2
result=math.sqrt(s*(s-self.a)*(s-self.b)*(s-self.c))
return result
def __str__(self):
return super(Triangle, self).__str__()+'三条边长为:'+str(self.a)+','+str(self.b)+','+str(self.c)
class Circle(Shape):
def __init__(self,r):
super(Circle, self).__init__('圆形')
self.r=r
def cir(self):
return 3.14*self.r**2
def area(self):
return 2*3.14*self.r
def __str__(self):
return super(Circle, self).__str__()+'半径为:'+str(self.r)
class Rectangle(Shape):
def __init__(self,a,b):
super(Rectangle, self).__init__('矩形')
self.a=a
self.b=b
def cir(self):
return 2*(self.a+self.b)
def area(self):
return self.a*self.b
def __str__(self):
return super(Rectangle, self).__str__()+'长和宽为:'+str(self.a)+','+str(self.b)
if __name__=='__main__':
t1=Triangle(3,4,5)
t2=Triangle(9,5,7)
t3=Triangle(3,6,5)
c1=Circle(3)
c2=Circle(4)
c3=Circle(5)
r1=Rectangle(3,4)
r2=Rectangle(5,6)
r3=Rectangle(7,8)
slist=[t1,t2,t3,c1,c2,c3,r1,r2,r3]
for each in slist:
print(each,end='')
print('面积是:{0:.2f},周长是:{1:.2f}'.format(each.area(),each.cir()))
print('对象个数为:'+str(Shape.getCount()))
五、总结和体会
不知不觉,学到现在,课程内容感觉听不懂了,也越来越吃力了,现在也没当初那么的坚定了。我学的是数学师范专业,以后是要当老师的,现在学的这些对我而言,其实没有什么用处,而且现在学的也有点过于深入了,我感觉没有太大必要花太多时间去学,我现在尽量认真听每节课,认真的完成每次作业。
随意将自己作业共享给大家参考,本人不是专业的,如有错误请自行订正哈~