类封装

封装

  1. 数据角度

    将一些基本数据类型复合成一个自定义类型,将数据抽象之后封装起来

    优势:

    ​ 将数据与数据的操作相关联,代码可读性更高(类是对象的模板)

    # 将商品数据抽象化
    class Commodity:
        def __init__(self, cid=0, name="", price=0):
            self.cid = cid
            self.name = name
            self.price = price
    
    listCommodityInfo = [
        Commodity(1000, "轩辕剑", 5000),
        Commodity(1001, "莫邪剑", 6000),
        Commodity(1002, "七龙珠", 9000)
    ]
    
    def PrintCommodity(commodity):
        print(f"商品ID:{commodity.cid},商品名称:{commodity.name},商品价格:{commodity.price}")
    
    
    def PrintCommodityInfo():
        for Commodity in listCommodityInfo:
            PrintCommodity(Commodity)
    
    if __name__ == '__main__':
        PrintCommodityInfo()
    
  2. 行为角度

    定义:向类外提供必要功能,隐藏实现细节。保障数据有效性

    优势:简化编程,使用者不必交接具体现实细节

    隐藏成员(私有成员):以双下划线开头的成员叫隐藏成员,类外无法访问,也可以叫私有成员,内部可以访问

    本质是障眼法,看着双下划线命名,实际是单下划线类名+双下划线名:_MyClass__data

    class Enemy:
        def __init__(self, name="", hp=0, atk=0, defense=0):
            self.name = name
            self.hp = hp
            self.atk = atk
            self.defense = defense
        @property
        def hp(self):
            return self.__hp
        @hp.setter
        def hp(self,value):
            if 0 <= value <= 100:
                self.__hp = value
            else:
                raise Exception("血量不符合要求!")
    
        @property
        def atk(self):
            return self.__atk
        @atk.setter
        def atk(self,value):
            if 0 <= value <= 200:
                self.__atk = value
            else:
                raise Exception("攻击力不符合标准")
        # 属性,保护实例变量
        # 属性名与实例变量名称相同
        # 属性中操作私有变量
        # 核心:覆盖拦截
        """
        @property 装饰器,可以拆分成三步
        (1)property()创建属性对象
        (2)将下面函数作为参数传给property。property(defense)
        (3)将属性对象交给变量名关联defense
        """
        @property
        def defense(self):
            return self.__defense
        @defense.setter
        # 此时defense是经过property装饰过函数
        # defense.setter(设置函数),调用下面函数作为参数
        def defense(self,value):
            if 0 <= value <= 200:
                self.__defense = value
            else:
                raise Exception("防御力不符合标准")
    
    e01 = Enemy("灭霸", 100, 60, 1200)
    print(f"{e01.name},血量{e01.hp},攻击力{e01.atk},防御力{e01.defense}")
    
  3. 设计角度

上一篇:递归,面向对象初识


下一篇:[JLOI2015][左偏树] 城池攻占