面相对象编程 扩充之封装、访问机制、 property
封装:
封装指的是可以将一堆属性和方法,封装到对象中
ps : 对象就好比一个 “袋子/容器”, 可以存放一堆属性和方法
ps : 存不是目的,目的是为了取,可以通过“对象” d的方式获取属性或方法
为什么要封装:
可以通过“对象”的方式 “存放/获取” 属性或方法
对象拥有 "." 的机制
方便数据的存取
如何封装:
class User:
x = 10
def func()
pass
obj = User
obj.y = 20
obj ---> x, func, y
访问机制:
什么是访问机制:
凡是在类内部定义的属性或方法
以__ 开头的属性或方法,都会被限制,外部不能 "直接访问" 该属性原型
PS:看着像该属性或方法隐藏起来了
#python 特有的:
凡是在类内部定义__ 开头的属性或方法,都会变成——类名—— 属性/方法
为什么要用访问机制:
可以对一些隐私信息进行保护
如何实现:
class User:
__name = 'tank' # __name 变形为--> __类名__name
def _run(self):
print('sean is running...')
property
property :一个python内置的装饰器,可以装饰在"类内部方法上"
可以将该方法调用方式由 对象.方法() ----> 对象.方法
为什么要用property:
ps: 在某些场景下,调用的方法只是用来获取计算后的某个值
ps : 必须通过 对象.方法() 方式调用,让该方式看起来像动词、
让名词的方法,调用时更为合理
目的是为了,迷惑调用者,调用的方法误以为是 属性
class User:
def __init__(self, name, weight, height):
self.name = name
self.weight = weight
self.height = height
@property
def dim(self):
return self.weight / (self.height ** 2) # @property
# def name(self):
# return self._name
user_obj = User('WC', 75, 1.4)
user_obj.dim
print(user_obj.dim)
面相对象编程 扩充之封装、访问机制、 property的更多相关文章
- python 的面相对象编程--对应c++
在python的面相对象编程中,我们常常在class中可以看到a(), _b() , __c(), __d()__这样的函数. 由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我 ...
- 019 python面相对象编程
一:self的意思 1.说明 self代表类的实例,而非类. 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self. self 代表的是类的实例 ...
- PHP面相对象编程-重载、覆盖(重写) 多态、接口
http://www.ctolib.com/topics-21262.html http://cnn237111.blog.51cto.com/2359144/1284085 http://blog. ...
- 关于Python的面相对象编程
Python 其实不是面向对象的语言,更像是C语言的面向过程编程的语言 但 Python 也支持 class 关键字来实现类的声明与创建 但 Python 的对象更像是 JavaScript 的函数 ...
- js编程-面相对象
//js面相对象编程 //定义constructor构造方法 function myFn(name,sex){ this.name = name; this.sex = sex; } //用proto ...
- Java多线程编程核心技术-第2章-对象及变量的并发访问-读书笔记
第 2 章 对象及变量的并发访问 本章主要内容 synchronized 对象监视器为 Object 时的使用. synchronized 对象监视器为 Class 时的使用. 非线程安全是如何出现的 ...
- Java开发知识之Java面相对象
Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...
- python之面相对象程序设计
一 面向对象的程序设计的由来 面向对象设计的由来见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 面向对象的程序设计:路飞学院版 ...
- go 学习笔记之go是不是面向对象语言是否支持面对对象编程?
面向对象编程风格深受广大开发者喜欢,尤其是以 C++, Java 为典型代表的编程语言大行其道,十分流行! 有意思的是这两中语言几乎毫无意外都来源于 C 语言,却不同于 C 的面向过程编程,这种面向对 ...
随机推荐
- ES6 的基础教程
一.介绍 1.历史 ECMAScript和JavaScript ECMA是标准,JS是实现 类似于HTML5是标准,IE10.Chrome.FF都是实现 换句话说,将来也能有其他XXXScript来实 ...
- C Primer Plus 学习 第三章
这里只记录我自己以前不懂得地方,明白的地方就略过了 位 字节 字 位 0,1 字节 8位 也就有8位0,1的组合 2的8次方的组合 字 设计计算机时给定的自然存储单元.8位 ...
- java插件提示安全设定高,不能加载解决方法
当不可信小应用程序或应用程序在 Web 浏览器中运行时,我应当如何控制? 本文适用于: Java 版本: 7.0, 8.0 通过 Java 控制面板设置安全级别 在 Java 控制面板中,单击 Sec ...
- mongodb使用简介
mongodb简介 在使用nodejs时候,需要存储一些简单json数据的情况下,很多人会推荐使用mongodb.mongodb是一个文档型数据库,在 sql 中,数据层级是:数据库(db) -> ...
- Delphi 安装Cnpack cnvcl后界面不断弹出 Memory Manager's list capablity overflow ,please enlarge it!
Delphi 安装Cnpack cnvcl后界面不断弹出 Memory Manager's list capablity overflow ,please enlarge it! 解决方法:删除指定 ...
- HTML5浏览器
你可以学会如何使用旧的浏览器正确处理新的HTML5. HTML5 浏览器支持 HTML5 支持所有现代浏览器. 此外,所有的浏览器,旧的和新的,自动处理未被识别的元素作为内联元素. 因为这样,你可以& ...
- git常用操作命令2
以github为例,测试本地库与远程库github之间的交互 1. 本地初始化一个git库 创建一个test文件夹,然后cd到test文件内, 执行git init命令 初始化本地库成功!! ...
- JS谷歌浏览器断点调试
1.找到对应的文件 按F12打开网页调试工具,默认打开的是Elements,显示的是网页标签元素.选择Source,在左侧找到对应的js代码文件(这里是在page标签上找到的) 1.1.如何找到web ...
- 安装windows10和fedora23双系统的一些注意事项
在安装双系统windows10和fedora的过程中遇到了很多的问题,博主也是在慢慢的摸索中最后莫名其妙的成功的安装双系统. 当然,幸亏博主机智的记住了中间的一些细节,所以大致上的有一些注意事项希望能 ...
- opencc模块用langconv替换
将一下两个py下载并放入代码目录:https://raw.githubusercontent.com/skydark/nstools/master/zhtools/langconv.py https: ...