实验七.面向对象程序设计

一、实验目的

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()))

、总结和体会

不知不觉,学到现在,课程内容感觉听不懂了,也越来越吃力了,现在也没当初那么的坚定了。我学的是数学师范专业,以后是要当老师的,现在学的这些对我而言,其实没有什么用处,而且现在学的也有点过于深入了,我感觉没有太大必要花太多时间去学,我现在尽量认真听每节课,认真的完成每次作业。

随意将自己作业共享给大家参考,本人不是专业的,如有错误请自行订正哈~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值