python基础------类与对象之间的关系,封装、继承、多态

类与对象、封装、继承

练习1

# 1.写一个员工类BwEmployee
class BwEmployee(object):
# (2)添加构造方法,包含5个形参,保存外部传入值,分别给以下实例属性赋值:
# 	专业prof,姓名name,职务job(默认讲师),年龄__age(私有属性,默认18),评委打分wk_grade(默认[6,7,8,9,10])
    def __init__(self,prof,name,job='讲师',age=18,wk_grade=[6.0,7.0,8.0,9.0,10.0]):
        self.prof=prof
        self.name=name
        self.job=job
        self.__age=age
        self.wk_grade=wk_grade
# (3)写一个实例方法av_grade(),计算输出此员工的最终得分,规则如下:
# 根据评委的打分,去掉一个最高分,去掉一个最低分,剩下的分数求平均值,作为最终得分
    def av_grade(self):
        self.wk_grade.sort()
        del self.wk_grade[-1]
        del self.wk_grade[0]
        b=sum(self.wk_grade)/len(self.wk_grade)
        return b
# (4)在BwEmployee类中,添加打印方法,介绍员工情况:
# 如果员工最终得分>8.8,返回信息如下:
# 	XX员工(即prof)XX(即name),职务:(job),评定得分 XX(av_grade),今年XX(__age)岁
# 如果员工最终得分<8.8,返回信息如下:
# 	XX员工(即prof)XX(即name),职务:(job),评定得分不合格
    def __str__(self):
        if self.av_grade()>8.8:
            return f'{self.prof},{self.name},职务:{self.job},评定得分 {self.av_grade()},今年{self.__age}岁'
        else:
            return f'{self.prof},{self.name},职务:{self.job},评定得分不合格'
# (5)在BwEmployee类中,添加析构方法,输出:
# XX员工(即prof)XX(即name)已经离职!
    def __del__(self):
        print(f'{self.prof}员工{self.name}已经离职!')
# (6)写一个私有的实例方法__speech(),输出:
# 		有些害羞,讲课声音小
    def __speech(self):
        print('有些害羞,讲课声音小')
# (7)写一个实例方法intro(),内部实现功能如下:
# 先运行av_grade(),如果员工最终得分<8.8,再运行__speech方法
    def intro(self):
        c=self.av_grade()
        print(c)
        if c<8.8:
            return self.__speech()
# (8)写一BwEmployee类对象bw=BwEmployee('人工智能',‘讲师’,‘张三’,22,[8.5,8.9,9.1,8.7,8.3 ])
bw=BwEmployee('人工智能','讲师','张三',22,[8.5,8.9,9.1,8.7,8.3])

# (9)运行intro()方法
bw.intro()
# (10)运行打印方法
print(bw.__str__())


练习2:

# 1)定义一个小学类PrimarySchool
class PrimarySchool(object):
# 2)设置一个类属性school_name(学校名称),值为'BJ小学'
    school_name='BJ小学'
# 3)再加一个类方法, setName,包含一个参数可以接收外来的实参,只对学校名进行修改
    @classmethod
    def setName(cls,s):
        cls.school_name=s
        return cls.school_name

# 4)写构造方法,三个参数分别给三个实例属性赋值, Chinese,math,English代表三门课程,默认值分别为'语文','英语','数学'
    def __init__(self,Chinese='语文',math='英语',English='数学'):
        self.Chinese=Chinese
        self.math=math
        self.English=English
# 5)写魔法方法(打印),返回字符串格式如下:XX(学校名称),共有三门课程,分别是XX、XX、XX(列出所有课程)
    def __str__(self):
        return f'{PrimarySchool.school_name},共有三门课程,分别是{self.Chinese}{self.math}{self.English}'
# 6)写一个私有的实例方法, Warning,方法内实现对三门课程的平均成绩进行判断,如果小于85分则输出:考试不合格
    def __Warning(self):
        a=float(input('请输入语文成绩:'))
        b=float(input('请输入数学成绩:'))
        c=float(input('请输入英语成绩:'))
        avg=(a+b+c)/3
        if avg<85:
            print('考试不合格')
# 7)写一个中学类 MiddleSchool,继承小学类
class MiddleSchool(PrimarySchool):
# 8)重写构造方法,新增加两个实例属性分别是physics,chemistr,默认值分别为'物理','化学'
    def __init__(self,Chinese='语文',math='数学',English='英语',physics='物理',chemistr='化学'):
        super().__init__(Chinese,math,English)
        self.physics=physics
        self.chemistr=chemistr
# 9)重写打印方法,返回字符串格式如下:XX(学校名称),共有五门课程,分别是XX、XX、XX(列出所有课程)
    def __str__(self):
        return f'{MiddleSchool.school_name},共有五门课程,' \
               f'分别是{self.Chinese}{self.math}{self.English}{self.physics}{self.chemistr}'
# 10)调用MiddleSchool类方法,将学校名称改为:BJ中学
print(MiddleSchool.setName('BJ中学'))
# 11)分别创建两个类的对象ps,ms
ps=PrimarySchool('语文','数学','英语')
ms=MiddleSchool('语文','数学','英语','物理','化学')
# 12)用各自对象调用两个类的打印方法
print(ps)
print(ms)

练习3:

#3.添加 Car.py文件,完成如下任务,按要求实现类的继承和多态:
# (1)定义战车类Car,继承所有对象
import random
import string
class Car(object):
# (2)于构造方法中新加2个实例属性:一个是名字cname,一个是最大行进速度speed(将speed设置默认值为20)
    def __init__(self,cname,speed=20):
        self.cname=cname
        self.speed=speed
# (3)创建对象方法show(),简介此对象性能:XX(即cname)可以XX(即speed)时速行进!
    def show(self):
        print(f'{self.cname}可以{self.speed}时速行进!')
# (4)写一个陆战车类,landCar,继承父类 Car,类内pass
class landCar(Car):
    pass
# (5)写一个战舰类Warship,继承父类 Car,类内pass
class Warship(Car):
    pass
# (6)再写一个类BiCar,多继承,继承战车类和战舰类
class BiCar(landCar,Warship):
# (7)在类BiCar内增加实例属性:地域field,默认值‘陆地或水中’
    def __init__(self,cname,speed,field='陆地或水中'):
        super().__init__(cname,speed)
        self.field=field
# (8)类BiCar内重写show方法,输出一句话,内容:两栖战车XX(即cname)可在XX(field)行进,水中时速可达30公里,陆地时速可达65公里
    def show(self):
        print(f'两栖战车{self.cname}可在{self.field}行进,水中时速可达30公里,陆地时速可达65公里')
# (9)类BiCar 写方法 number(),为战车随机生成一个4位数字的号码
    def number(self):
        ls=random.choices(string.digits,k=4)
        return ''.join(ls)
# (10)类BiCar 写方法 sign(),为战车随机生成一个大写字母,作为标志
    def sign(self):
        ll=random.choice(string.ascii_uppercase)
        return ll
# (11)类BiCar 写无返方法 license(),函数内部调用number()和sign(),将标志和号码组合起来,构成一个车牌号为战车使用,
# 输出:战车车牌号为XX.(例如:W-3999)
    def license(self):
        print(f'战车车牌号为{self.sign()}-{self.number()}')
# (12)分别创建对象如下:
cr=Car('VN10',120)
# Car对象cr,名字VN10,速度120
lc=landCar('VN12',120)
# landCar对象lc,名字VN12,速度120
ws=Warship('VN12',60)
# Warship对象ws,名字VN12,速度60
bc=BiCar('VN18',120)
# BiCar对象bc,名字VN18,速度120,field默认
# (13)再写一函数,名称mrshow,参数obj(表示一个对象),函数内运行对象参数的show方法
def mrshow(obj):
    obj.show()
# (14)利用mrshow函数实现多态性
mrshow(cr)
mrshow(lc)
mrshow(ws)
mrshow(bc)
# (15)用BiCar的对象调用无返方法 license()
bc.license()

练习4:

# 1.写一个员工类BwEmployee
class BwEmployee(object):
# (2)添加构造方法,包含5个形参,保存外部传入值,分别给以下实例属性赋值:
# 	专业prof,姓名name,职务job(默认讲师),年龄__age(私有属性,默认18),评委打分wk_grade(默认[6,7,8,9,10])
    def __init__(self,prof,name,job='讲师',age=18,wk_grade=[6.0,7.0,8.0,9.0,10.0]):
        self.prof=prof
        self.name=name
        self.job=job
        self.__age=age
        self.wk_grade=wk_grade
# (3)写一个实例方法av_grade(),计算输出此员工的最终得分,规则如下:
# 根据评委的打分,去掉一个最高分,去掉一个最低分,剩下的分数求平均值,作为最终得分
    def av_grade(self):
        self.wk_grade.sort()
        del self.wk_grade[-1]
        del self.wk_grade[0]
        b=sum(self.wk_grade)/len(self.wk_grade)
        return b
# (4)在BwEmployee类中,添加打印方法,介绍员工情况:
# 如果员工最终得分>8.8,返回信息如下:
# 	XX员工(即prof)XX(即name),职务:(job),评定得分 XX(av_grade),今年XX(__age)岁
# 如果员工最终得分<8.8,返回信息如下:
# 	XX员工(即prof)XX(即name),职务:(job),评定得分不合格
    def __str__(self):
        if self.av_grade()>8.8:
            return f'{self.prof},{self.name},职务:{self.job},评定得分 {self.av_grade()},今年{self.__age}岁'
        else:
            return f'{self.prof},{self.name},职务:{self.job},评定得分不合格'
# (5)在BwEmployee类中,添加析构方法,输出:
# XX员工(即prof)XX(即name)已经离职!
    def __del__(self):
        print(f'{self.prof}员工{self.name}已经离职!')
# (6)写一个私有的实例方法__speech(),输出:
# 		有些害羞,讲课声音小
    def __speech(self):
        print('有些害羞,讲课声音小')
# (7)写一个实例方法intro(),内部实现功能如下:
# 先运行av_grade(),如果员工最终得分<8.8,再运行__speech方法
    def intro(self):
        c=self.av_grade()
        print(c)
        if c<8.8:
            return self.__speech()
# (8)写一BwEmployee类对象bw=BwEmployee('人工智能',‘讲师’,‘张三’,22,[8.5,8.9,9.1,8.7,8.3 ])
bw=BwEmployee('人工智能','张三','讲师',22,[8.5,8.9,9.1,8.7,8.3])

# (9)运行intro()方法
bw.intro()
# (10)运行打印方法
print(bw.__str__())


练习5:

# 12、定义Table类,要求建立某一种桌子对象,并对该桌进行简单的介绍处理。
class Table:
# 13、写一个构造方法,接收3个参数,分别为3个实例属性赋值:
# 	dname(桌名,默认值为“铁桌”)、price(单价)、lwh(长宽高尺寸,默认值为[1.4,0.6,0.6]),利用传参方式对实例属性进行赋值
    def __init__(self,price,dname='铁桌',lwh=[1.4,0.6,0.6]):
        self.dname=dname
        self.price=price
        self.lwh=lwh
# 14.写普通介绍intro方法:介绍桌子的情况
# 	格式化输出:“XXX桌子,单价:XX元,尺寸如下:长:XX,宽:XX,高:XX”
    def intro(self):
        return f'{self.dname}桌子,单价:{self.price}元,尺寸如下:长:{self.lwh[0]},宽:{self.lwh[1]},高:{self.lwh[2]}'
# 15、调整宽方法set_length()实例方法,将长减少0.1,并显示当前尺寸;
    def set_length(self):
        self.lwh[0]-=0.1
# 16、购桌buy(num=20)实例方法,计算购买桌量num时所需要的钱数量;
    def buy(self,num):
        price=self.price*num
        return price
# 17、写一个计算占空间大小的方法:cube(),返回一张桌子占用的空间大小(长宽高之积);
    def cube(self):
        s=self.lwh[0]*self.lwh[1]*self.lwh[2]
        return s
# 18、获取当前单价的方法。get_price() 返回当前单价。
    def get_price(self):
        return self.price
# 19、建立某一种桌子对象,测试如下:
# 塑料桌子,单价110,长宽高分别为:1.3,0.4,0.5
tab=Table(110,'塑料桌子',[1.3,0.4,0.5])
print(tab.intro())
# 20、调用set_width()实例方法,cube()实例方法。
tab.set_length()
print(tab.intro())
print(f'一张桌子占用的空间大小为:{tab.cube()}')
# # 21、调用buy(num)实例方法,计算购置50张桌子的总钱数量。
print(f'购置50张桌子的总钱数量为:{tab.buy(50)}')
print(tab.intro())

练习6:

# 1.创建学生类Person。
# 2.添加静态方法,showInfo:
# (1)显示信息“龙的传人”;
# 3.添加类属性:country,国籍,默认值为“中国“。
# 4.添加类属性:nation,民族,默认值为“汉族“。
# 5.添加构造方法,添加如下对象属性:
# (1)name,保存学生姓名,默认值为空字符串。
# (2)age,保存学生年龄,默认值为0.
# (3)birth,保存出生日期,默认值为空字符串。
# (4)money,保存工资收入,私有权限,默认值为0.
class Person(object):
    @staticmethod
    def showinfo():
        print('龙的传人')
    country = '中国'
    nation = '汉族'
    def __init__(self,name=' ',age=0,birth=' ',money=0):
        self.name=name
        self.birth=birth
        self.age=age
        self.__money=money

# 1.添加类属性对应的set方法和get方法,完成设置和获取类属性值。
    def set_country(self,country):
        self.country=country

    def get_country(self):
        return self.country

    def set_nation(self,nation):
        self.nation=nation

    def get_nation(self):
        return self.nation

# 2.添加魔法方法,将所有属性用格式化字符串组合成一个字符串后返回。
    def __str__(self):
        return f'名字:{self.name},年龄:{self.age},出生:{self.birth},' \
               f'国家:{self.country},民族:{self.nation},钱:{self.__money}'

# (1)格式如下:
# 国籍:中国
# 民族:汉
# 姓名:???
# 年龄:???
# 出生日期:???
# 3.添加setName方法,修改对象属性name。
# 4.添加getName方法,获得对象属性name的值。
    def set_name(self, name):
        self.name = name

    def get_name(self):
        return self.name
# 5.添加setAge方法,修改对象属性age。
# 6.添加getAge方法,获得对象属性age得值。
    def set_age(self, age):
        self.age = age

    def get_age(self):
        return self.age
# 7.添加setBirth方法,修改对象属性birth。
# 8.添加getBirth方法,获得对象属性birth的值。
    def set_birth(self, birth):
        self.birth = birth

    def get_birth(self):
        return self.birth
# 9.添加私有属性的set和get方法。
#     def set_money(self, money):
#         self.__money = money
    @property
    def get_money(self):
        return self.__money

    @get_money.setter
    def get_money(self,n):
        self.__money+=n


    # def set_money(self,n):
    #     self.__money+=n
    #     return self.__money
    # def get_money(self):
    #     return self.__money
# 10.添加对象方法info,输出当前对象的个人信息:
# (1)格式如下:
# 姓名—年龄—出生日期-存款
    def info(self):
        print(f'姓名:{self.name},年龄{self.age},出生日期:{self.birth},存款:{self.__money}')
    def __a(self):
        return 'b'

    def aaa(self):
        return self.__a():
# p=Person('lisi',19,1999,20000)
# 1.添加主程序入口,完成如下任务:
# (1)调用静态方法:
# ①提示:通过对象调用
# p.showinfo()
# ②提示:通过类名调用;
# Person.showinfo()
# (2)创建一个对象。
b=Person()
# (3)修改对象的所有对象属性。
b.name='小明'
b.age=23
b.birth='1998'
# b.__money=10000

print(b.get_money)
print(b)
# (4)通过对象方法获得对象的所有属性值,并显示。
b.get_age()
b.get_name()
b.get_birth()
b.get_money=10000


# (5)调用info显示对象信息。
b.info()
# (6)调用对象的打印方法,输出信息;
# print(b)
# (7)再次修改所有对象的属性。
b.name='小华'
b.age=25
b.birth='1996'
# b.__money=20000
b.get_money=20000
# (8)再次调用对象的打印方法。
b.info()
# print(b)

print(b.aaa())

class BWstudent(Person):
    def __init__(self,name,age,birth,money,score):
        # super(BWstudent, self).__init__(self,name,age,birth,money)
        super().__init__(self, name, age, birth,money)
        self.score=score
        # self.__money=money
    def app(self):
        super().info()
        print(self.score)
    def show(self):
        print(f'{self.name},{self.birth},{self.age},{self.country}')

p=BWstudent('lisi',19,1999,20000,98)
print(p)
p.app()
p.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞龙程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值