面向对象之封装

封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体。

隐藏

在python中用双下划线开头的方式将属性隐藏起来(设置成私有的)

class A:__N=0 #类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如__N,会变形为_A__Ndef __init__(self):self.__X=10 #变形为self._A__Xdef __foo(self): #变形为_A__fooprint('from A')def bar(self):self.__foo() #只有在类内部才可以通过__foo的形式访问到.
#在类的外部像__X=1和__foo()这样调用是不正确的

但是,这种机制也并没有真正意义上限制我们从外部直接访问属性,知道了类名和属性名就可以拼出名字:_类名__属性,然后就可以访问了,如a._A__N,即这种操作并不是严格意义上的限制外部访问,仅仅只是一种语法意义上的变形,主要用来限制外部的直接访问。

特性(property) 

property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值。

举个例子

例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解)

成人的BMI数值:
过轻:低于18.5
正常:18.5-23.9
过重:24-27
肥胖:28-32
非常肥胖, 高于32
体质指数(BMI)=体重(kg)÷身高^2(m)
EX:70kg÷(1.75×1.75)=22.86
class People:def __init__(self,name,weight,height):self.name=nameself.weight=weightself.height=height@propertydef bmi(self):return self.weight / (self.height**2)p1=People('pup',53,1.70)
print(p1.bmi)
#输出18.339100346020764

这种特性是不能被修改赋值的,否则会报错。

转载于:https://www.cnblogs.com/smilepup-hhr/p/10461112.html

从零开始的Python学习Episode 20——面向对象(3)相关推荐

  1. 从零开始的Python学习Episode 4——列表

    一.列表 列表与数组相似,定义一个列表 a=[1,2,3,4,5] 1.基本操作 1 a=[1,2,3,4] 2 3 #切片 范围取值时,包括第一项但不包括最后一项,顾头不顾尾 4 print(a[0 ...

  2. 从零开始学习python编程-从零开始的Python学习 -- 简单的练习题

    从零开始的Python学习 – 简单的练习题 目录: 从零开始的Python学习 -- 简单的练习题 前言: 顺序结构 A+B problem 苹果采购 分支结构 数的性质 闰年判断 Apple 循环 ...

  3. 从零开始的Python学习 -- 简单的练习题

    从零开始的Python学习 – 简单的练习题 目录: 从零开始的Python学习 -- 简单的练习题 前言: 顺序结构 A+B problem 苹果采购 分支结构 数的性质 闰年判断 Apple 循环 ...

  4. python 简单实例训练(1~10)-从零开始的Python学习 -- 简单的练习题

    从零开始的Python学习 – 简单的练习题 目录: 从零开始的Python学习 -- 简单的练习题 前言: 顺序结构 A+B problem 苹果采购 分支结构 数的性质 闰年判断 Apple 循环 ...

  5. 从零开始:Python学习成长路线

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  6. 2021小白Python学习记录Day7 面向对象基础(上) (定义类和对象、__init__传参、self、魔术方法)

    目录 一.定义类和对象 1.定义类 2.创建一个对象 2.1 创建一个实例对象并调用实例方法 2.2 创建另一个实例对象: 2.3 添加实例属性 二.__init__(self) 1. __init_ ...

  7. Python学习笔记:面向对象高级编程(完)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. Python学习笔记:面向对象高级编程(中下)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习笔记:面向对象高级编程(中上)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  10. Python学习笔记:面向对象高级编程(上)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

最新文章

  1. 怎么用计算机不会卡,电脑卡顿不流畅怎么解决?
  2. TCP、UDP和HTTP
  3. 作为 IT 行业的过来人,你有什么话想对后辈说的?2
  4. [python3] pyton socket 同步通信举例
  5. Java多线程——重入锁ReentrantLock源码阅读
  6. 24 SD配置-主数据-维护客户主记录中的保留字段
  7. JavaScript循环结构(1)
  8. 在线excel表格,支持协同编辑
  9. android 绘制分割线,Android 布局中分割线创建的三种方式
  10. Unhandled Exception: Looking up a deactivated widget‘s ancestor is unsafe.
  11. 打造前端MAC工作站(五)让我们熟悉一下 MAC 命令行吧!
  12. Block.one的EOS区块链入门开发教程Elemental Battles
  13. 用I2C级联扩展器做一个时钟盒子
  14. Icon glyphs 小图标命名收藏
  15. Mirai使用与攻击
  16. 修复xp打印服务器失败,xp打印机服务器设置方法
  17. Python 进阶必备:进程模块 multiprocessing
  18. 立方车场系统显示电脑连不上服务器,立方停车场车辆出入智能管理系统.ppt
  19. 离散数学 (II) 习题 1
  20. WhatsApp首次和东家Facebook实现用户数据互联

热门文章

  1. 苹果mac专业音频处理软件:Audition
  2. 如何防止 Safari 使用来自 iOS 15 和 macOS Monterey 的网站着色?
  3. iOS开发之国际化(本地化)
  4. WingPro 8 for Mac(专业Python IDE开发工具)
  5. DBeaverUE for Mac(数据库管理软件)旗舰版
  6. 自定义Mac睡眠时间,保持运行状态
  7. python里的拆包、引用、递归与匿名函数
  8. Linux KVM构建及管理
  9. SCCM 2012系列2 服务器准备下
  10. perl Makefile.PL;make;make install 安装时报错