Python入门之面向对象的三大特点--封装 继承 多态 详细讲解

本文详细介绍了Python面向对象的三大特性:封装、继承和多态。通过实例演示了如何使用封装来保护和管理数据,如何通过继承实现代码重用,以及多态的概念和应用。通过学习,读者可以更好地理解Python的面向对象编程思想。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、封装

封装是面向对象编程的一大特点,将属性和方法封装到一个抽象的类中

封装:把同一类型的东西放在一起,用self.***去调用
数据被保存在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行操作。外界使用类创建对象,然后让对象调用方法
通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节。对象方法的细节都被封装在类的内部

构造方法在示例化对象时自动执行

练习1需求:

1.小明体重75.0公斤
2.小明每次跑步都会减肥0.5公斤
3.小明每次吃东西体重都会增加1公斤

需求
1.小明和小美都爱跑步
2.小美体重45.0公斤
2.每次跑步都会减肥0.5公斤
3.每次吃东西体重都会增加1公斤

 

class People():
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight

    def __str__(self):
        return '我的名字叫%s,体重是%.2f' %(self.name,self.weight)

    def run(self):
        print('%s爱跑步' %self.name)
        self.weight -=0.5

    def eat(self):
        print('%s去吃饭' %self.name)
        self.weight += 1

xiaomei = People('小美',45)
xiaoming = People('小明',75)

xiaomei.eat()
print(xiaomei)
xiaoming.run()
print(xiaoming)

练习2需求:

1.房子有户型,总面积和家具名称列表
新房子是没有家具的
2.家具有名字和占地面积,其中
床:5
桌子:4
椅子:6
3.将以上三件家具添加到房子中
4.打印房子的时候,要求输出:户型 总面积 剩余面积 家具名称列表

class Room():
    def __init__(self,house_type,area):
        self.house_type = house_type
        self.area = self.leftarea = area
        self.jiaju = []
    def __str__(self):
        return '户型:%s\n总面积:%s   [剩余面积:%s]\n家具列表名称:%s' %(self.house_type,self.area,self.leftarea,self.jiaju)

    def add_furn(self,item):
        if item.area < self.leftarea:
            self.jiaju.append(item.name)
            self.leftarea -= item.area
        else :
            return

class jiaju:
    def __init__(self,name,area):
        self.name = name
        self.area = area

    def __str__(self):
        return 'this is %s,and %d square' %(self.name,self.area)

bed = jiaju('bed',5)
desk = jiaju('desk',4)
chair = jiaju('chair',6)

room1= Room('三室',120)
room1.add_furn(bed)
room1.add_furn(desk)
room1.add_furn(chair)
print(room1)

练习3需求:

1.士兵瑞恩有一把AK47
2.士兵可以开火(士兵开火扣动的是扳机)
3.枪 能够 发射子弹(把子弹发射出去)
4.枪 能够 装填子弹 --增加子弹的数量

 

#枪类
class Gun():
    def __init__(self,name,count):
        self.name = name
        self.bullet_count = count
        print('%s共有%d枚子弹' %(self.name,self.bullet_count))

    def __str__(self,name,count):
        return ('%s还有%d颗子弹' %(self.name,self.bullet_count))

     #装子弹方法
    def add_bullet(self,count):
        self.bullet_count+=count
        print('%s成功装了%d枚子弹,目前一共%d枚子弹' %(self.name,count,self.bullet_count))
    
    #射击方法
    def shoot(self):
        if self.bullet_count >=1:
            self.bullet_count-=1
            print("发射子弹,还有%s枚子弹" %(self.bullet_count))
        else:
            print('子弹数量不足')

#士兵类
class Soldier():
    def __init__(self,name,gun):
        self.name = name
        self.gun = gun

    def __str__(self,name,count):
        return ('士兵%s有一把%s' %(self.name,self.gun))

    #开火方法
    def fire(self,gun):
        if gun.bullet_count >0:
            gun.bullet_count-=1
            print('士兵%s用%s开枪,还有%d枚子弹' %(self.name,self.gun,gun.bullet_count))
        else:
            print('子弹不足,请装子弹')


AK47 = Gun('AK47',100)
# print(AK47)
RuiEn = Soldier('RuiEn','AK47')
RuiEn.fire(AK47)
RuiEn.fire(AK47)
AK47.add_bullet(50)

二 继承:定义一个类,可以从现有的某个类继承

新的类称为子类 扩展类(Subclass),被继承的称为父类 基类 超类 (Baseclass Superclass)

继承具有传递性

  • 继承:实现代码的重用,相同的代码不需要重复写
  • 子类继承自父类,可以直接享受父类中已经封装好的方法
  • 子类重应该根据职责,封装子类特有的属性和方法
  • 如果子类重写了父类的方法
  • 在运行中,只会调用在子类中重写的方法而不会调用父类方法
class Animal():
    def eat(self):
        print('吃')

    def drink(self):
        print('喝')

    def sleep(self):
        print('睡')

class Cat(Animal):
    def yell(self):
        print('喵')

class Jiqimao(Cat):
    def speak(self):
        print('我会说话')

jqm = Jiqimao()
jqm.speak()
jqm.sleep()

 

 

  • 多继承:子类拥有多个父类叫多继承,拥有所有父类的属性和方法
  • 当父类的方法或属性同名时,按括号中的父类先后顺序执行 
class A():
    def test(self):
        print('A --- test 方法')
    def demo1(self):
        print('A --- demo1方法')

class B():
    def test(self):
        print('B --- test 方法')
    def demo(self):
        print('B --- demo方法')

class C(B,A):
    pass

c = C()
c.test()
c.demo1()

三 多态

多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果 

class Student():
    def get_score(self):
        print('获取学生成绩...')

class Chinese():
    def get_score(self):
        print('获取语文成绩...')

class Math():
    def get_score(self):
        print('获取数学成绩...')

student1 = Student()
student2 = Chinese()
student3 = Math()
student1.get_score()
student2.get_score()
student3.get_score()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值