首页 > 其他分享 >面向对象之封装

面向对象之封装

时间:2024-01-13 23:22:44浏览次数:23  
标签:__ info 封装 self 面向对象 location 属性

【一】面向对象三大特性

  • 面向对象编程有三大特性:
    • 封装、继承、多态
  • 其中最重要的一个特性就是封装。
    • 封装指的就是把数据与功能都整合到一起

【1】什么是封装

  • 就是对具体对象的一种抽象
  • 简单理解就是把不想让别人看到的对象藏起来

【2】为什么要封装

  • 有些敏感数据不想让使用者看到(保护隐私)

【二】隐藏属性

【1】隐藏属性方法

  • 在数据属性或函数属性前面加__

image-20240103150405430

  • 但是在函数内部可以访问到。

image-20240103150538191

【三】开放接口

  • 定义属性就是为了使用,所以隐藏并不是目的
class Hero:
    name = '后羿'
    work = '射手'
    __location = '王者峡谷'

    def show_info(self):
        print(self.__location)

user = Hero()
user.show_info() # 王者峡谷
  • 这里location用__隐藏起来了
  • 但是在内部函数show_info调用了这个数据属性,且这个函数没有被隐藏
  • 这时候这个函数就成了外部调用location这个数据属性的接口
  • 函数也是一样的道理
class Hero:
    name = '后羿'
    work = '射手'
    __location = '王者峡谷'

    def __init_info(self):
        print(self.__location)

    def show_info(self):
        self.__init_info()


user = Hero()
user.show_info()  # 王者峡谷

(小结)

  • 总结隐藏属性与开放接口,本质就是为了明确地区分内外,类内部可以修改封装内的东西而不影响外部调用者的代码;
  • 而类外部只需拿到一个接口,只要接口名、参数不变,则无论设计者如何改变内部实现代码,使用者均无需改变代码。
  • 这就提供一个良好的合作基础,只要接口这个基础约定不变,则代码的修改不足为虑。

【四】装饰器property

【1】什么是property

  • property是一种特殊的属性,访问它时会执行一段函数,然后返回值。
  • 他的主要作用就是用来把绑定给对象的方法,伪装成一个数据属性。

【2】计算圆的面积

  • 实例化对象给出半径
class CalculateCircle:
    def __init__(self, r):
        self.__r = r

    @property
    def radio(self):
        area = 3.14 * (self.__r ** 2)  
        
        return f'圆的面积为{area}'

    @radio.setter
    def radio(self, r):
        if r > 100:
            raise ValueError('太大啦')  
            
        self.__r = r


test1 = CalculateCircle(10)
test1.radio=30
print(test1.radio)

  • 对于使用者来说calculate_area就很像一个数据属性了

【3】为什么要用property

  • 将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则

标签:__,info,封装,self,面向对象,location,属性
From: https://www.cnblogs.com/Hqqqq/p/17963195

相关文章

  • 封装详解
    概念该露的露,该藏的藏我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数据的隐藏)通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。记住这句话......
  • 什么是面向对象
    面向过程&面向对象面向过程思想按顺序进行,线性思维步骤清晰简单,第一步做什么,第二步做什么……面对过程适合处理一些较为简单的问题面向对象思想属性加方法变成一个类物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最......
  • 免费APP分发,支持应用合并、内测分发、扫码下载,下载量安装量统计,版本记录和应用在线封
    免费APP内测分发托管平台,支持应用合并、内测分发、扫码下载,下载量安装量统计,版本记录和应用在线封装打包app应用分发?应用分发也叫APP分发,其主要功能是方便APP的快速安装测试和推广那么分发App选择什么平台最好呢?这个主要是看App处于什么阶段。看看是处于应用测试阶段还是处于测......
  • Python面向对象之反射
    【一】反射【1】什么是反射反射是一种程序可以访问、检测和修改其本身状态或行为的能力。在Python中,反射主要指通过字符串的形式操作对象的属性。【2】Python中的反射通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)【二】反射方法......
  • Python面向对象之派生
    派生【一】概要"派生"(Derivation)是指在面向对象编程中,通过创建新的类,基于已有的类(通常称为父类或基类)来构建新的类,以获取和扩展父类的属性和方法。在这个过程中,新创建的类称为子类或派生类。通俗来讲,派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法【......
  • 面向对象的三大特性及派生和组合
    面向对象的三大特性面向对象编程有三大特性:封装、继承、多态-->派生和组合【一】封装【1】什么是封装在程序设计中,封装(Encapsulation)是对具体对象的一种抽象封装就是对具体对象的一种抽象简单理解就是将不想让别人看到的东西全部藏起来【2】为什么要封装封装数......
  • 1.5A 电源模块TPSM5601R5HEXTRDAR、TPSM5601R5HRDAR使用增强型 Hotrod™ QFN封装
    采用增强型Hotrod™QFN封装的TPSM5601R5Hx60V输入、1V至16V输出、1.5A电源模块器件说明:TPSM5601R5Hx电源模块是一款高度集成的1.5A电源解决方案,在热增强型QFN封装内整合了一个带有功率MOSFET的60V输入降压直流/直流转换器、一个屏蔽式电感器和多个无源器件。此......
  • java基础语法面向对象之单个对象内存图
    一:概述在面向对象的学习中,需要去了解对象的内存图,在这里以单个对象的内存图为例进行讲解。二:具体说明<1>代码publicclassStudent{Stringname;intage;publicvoidstudy(){System.out.println(name+"好好学习");......
  • Python面向对象之绑定方法和非绑定方法
    绑定方法与非绑定方法【一】概要在Python中,绑定方法是指将类的实例与类的方法关联起来的过程。绑定方法包含类实例作为第一个参数,通常被称为self。当通过实例调用类的方法时,Python会自动传递实例作为第一个参数,这个过程就是方法绑定。【二】常用方法【1】绑定方法(动态方......
  • 封装、继承、多态
    封装、继承、多态、反射1.封装封装就是将属性隐藏,不让外界发现或使用将可以允许外界使用的内容通过接口开发,让用户通过接口使用隐藏属性的方法是通过__变量名1.1封装之隐藏属性隐藏数据属性classTeacher:def__init__(self,name,age):#将名字和年纪......