Python学习-- 面向对象封装

面向对象–三大特性

  1. 封装 根据职责将 属性方法 封装到一个抽象
  2. 继承 实现代码的重用(复用),实现相同的代码不需要重复的编写
  3. 多态 不同的子类对象调用相同的父类方法,产生不同的执行结果,增加代码灵敏度

面向对象–封装

封装

  1. 封装 是面向对象编程的一大特点
  2. 面向对象编程的第一步一一将属性和方法封装到一个抽象的类中
  3. 外界使用创建对象, 然后让对象调用方法
  4. 对象方法的细节 都被 封装类的内部

举例:图书管理系统

class Book:
    def __init__(self,name,author,num):
        self.name = name
        self.author = author
        self.num = num
        
    def addBook(self):
        print(f"新增图书《{self.name}》, 作者是 {self.author} , 库存有 {self.num} 本")
        
    def delBook(self):
        self.num -= 1
        print(f"删除一本《{self.name}》, 作者是 {self.author} , 剩余库存有 {self.num} 本")

    def __str__(self):
        return f"图书《{self.name}》, 作者是 {self.author} , 库存有 {self.num} 本"

book1 = Book("笑傲江湖","金庸",500)
book1.addBook()
book1.delBook()
print(book1)

book2 = Book("连城诀","金庸",1000)
print(book2)

应用:摆放家具

对象的关系有 一对一 一对多 多对多(例:一个老师有多个学生,一个学生有多个老师)。在日常的开发中绝大部分情况都是一对多,就算是多对多也会拆成两份一对多进行开发

开发一对多关系的,要先开发“多”,再开发“一”

class HouseItem:
    """
    @ Author: EvanZhang
    @ Date: 2025/4/7 11:23
    @ Info: 存储家具数据
    """
    def __init__(self,name,area):
        self.name = name
        self.area = area

class House:
    """
    @ Author: EvanZhang
    @ Date: 2025/4/7 11:09
    @ Info: 房子
    """
    def __init__(self,name,area):
        self.name = name
        self.area = area
        self.freearea = area
        self.item = []

    def addIten(self, house_item):
        if house_item.area > self.freearea:
            return
        iteminfo = []
        iteminfo.append(house_item.name)
        iteminfo.append(house_item.area)
        self.item.append(iteminfo)
        self.freearea -= house_item.area

    def __str__(self):
        return f"房屋户型:{self.name},总面积:{self.area},剩余面积:{self.freearea},家具列表:{self.item}"

bad = HouseItem("双人床",4)
chest = HouseItem("衣柜",2)
table = HouseItem("餐桌",1.5)

house = House("两室一厅",90)
house.addIten(bad)
house.addIten(chest)
print(house)

私有属性和私有方法

应用场景

  • 在实际开发中,对象某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到
  • 私有属性 就是 对象 不希望公开的 属性
  • 私有方法 就是 对象 不希望公开的 方法

定义方式

  • 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法
class Women:

    def __init__(self, name):

        self.name = name
        # 不要问女生的年龄
        self.__age = 18

    def secret(self):
        print("我是 %s 我的年龄是 %d" %(self.name , self.__age))

xiaofang = Women("小芳")
xiaofang.secret()

私有属性暴力访问

提示:在日常开发中,不要使用这种方式访问对象的 私有属性 或 私有方法

Python 中,并没有 真正意义私有

  • 在给 属性方法 命名时,实际是对 名称 做了一些特殊处理,使得外界无法访问到
  • 处理方式:在 名称 前面加上 _类名 => _类名__名称
# 私有属性,外部不能直接访问到
print(xiaofang._Women__age)

# 私有方法,外部不能直接调用
xiaofang._Women__secret()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值