Python面向对象的特征跟私有属性
面向对象的三大特征
继成、封装、多态:
继承:一个类可以继承一个或多个类,被继承的类叫做父类,继承的类叫做子类
封装:将数据和方法放在了一个类中就构成了封装
多态:指的一类事物有多重形态,一个抽象类有多个子类,不同的子类对象调用相同的
方法,产生不同的执行结果,多态可以增加代码的灵活度
注意:python 中函数的参数没有类型限制 Python严格意义上来讲没有多态,只是伪多态
鸭子类型的提现:
静态语言:对于静态语言(java、C#)来讲上面传入的对象必须是Base类型或者它的子类,否则
将无法调用run 方法
动态语言:对于动态语言Python来讲,上面传入的并不一定是base类型,也可以是其他类型,只要
再内部实现一个run()方法就行了,这就是鸭子类型的提现。
多态的意义:开放封闭原则
1.多个变量,我们只需要知道它是Base类型,无需确切地知道它的子类型,就可以放心的调用子类方法
2.当需要新增功能,只需要新增一个base的子类实现run方法,就可以在原来的基础上进行扩展,这就是
著名的开放封闭原则。
3.对扩展开放:允许新增base 子类
4.对修改封闭:不需要修改依赖base类型的run()函数
私有属性
1.类里面定义的变量叫类属性,那么类属性有两种,分为:公有属性和私有属性
私有属性的定义:
单下划线开头:_attr
双划线开头:__attr 注意:双下划线的开头的私有属性,对外不能直接访问,(它的名字被改变了,
在原有的属性名前面加了一个 _类名)
** 私有属性在类里面也可以被继承。私有属性也可以被类跟实例调用
Python并没有真正的私有化支持,但可用下划线得到伪私有,有一项大多数Python代码都遵循的习惯:
带有下划线,前缀的名称应被视为非公开的API的一部分,它应被视为实现细节,如有更改,恕不另行通知。
2.__dict__
类调用__dict__属性,返回类属性和方法的字典
实例调用__dict__属性,返回的值实例相关的属性和方法
注意:我们在创建类的时候,每一个类都会创建一个__dict__ 属性,这样会非常耗费内存,
如果采用继承就不会再创建__dict__只会在父类创建__dict__(性能优化方面)
3.内置属性__slots__
默认情况下,类的实例有一个字典用于存储属性。这对于具有很少实例变量的对象会浪费内存空间
当创建大量实例时,空间消耗会变得尖锐。
可以通过在类定义中定义__slots__ 来覆盖默认__dict__行为。_slots__声明接受一个实例变量序列
并在每一个实例中只保留足够保存每个变量值的空间。因为没有为每个实例创建__dict__,所以节省空间
注意:__slots__ 这个属性不会被继承,只对当前的类生效
Python面向对象的特征跟私有属性的更多相关文章
- Python面向对象静态方法,类方法,属性方法
Python面向对象静态方法,类方法,属性方法 属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法: ...
- Python面向对象三大特征
继承 面向对象中的继承就是继承的类直接拥有被继承类的属性而不需要在自己的类体中重新再写一遍,其中被继承的类叫做父类.基类,继承的类叫做派生类.子类.在python3中如果不指定继承哪个类,默认就会继承 ...
- Python笔记(十八)_私有属性、实例属性、类属性
私有属性 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,就变成了一个私有属性,只有内部可以访问,外部不能直接访问或修改. 这样就确保了外部代码不能随意修改对象内部的状态,这样通过 ...
- python面向对象的特征及反射
目录 派生类实操 面向对象特征之封装 property伪装属性(python内置装饰器) 面向对象特征之多态 面向对象之反射 派生类实操 1.将时间字典序列化成json格式,由于序列化数据类型的要求, ...
- Python面向对象基础:设置对象属性
用类存储数据 类实际上就是一个数据结构,对于python而言,它是一个类似于字典的结构.当根据类创建了对象之后,这个对象就有了一个数据结构,包含一些赋值了的属性.在这一点上,它和其它语言的struct ...
- python面向对象-2深入类的属性
在交互式环境中输入: >>> class A: a=0 def __init__(self): self.a=10 self.b=100 >>> a=A() > ...
- python 面向对象类成员(字段 方法 属性)
一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class Province: # 静态字段 countr ...
- python 面向对象(四)--实例属性和类属性
由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(se ...
- python 面向对象静态方法、类方法、属性方法、类的特殊成员方法
静态方法:只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性. 在类中方法定义前添加@staticmethod,该方法就与类中的其他(属性,方法)没有关系,不能通过实例化类调用方法使用 ...
随机推荐
- (PSO-BP)结合粒子群的神经网络算法以及matlab实现
原理: PSO(粒子群群算法):可以在全局范围内进行大致搜索,得到一个初始解,以便BP接力 BP(神经网络):梯度搜素,细化能力强,可以进行更仔细的搜索.数据: ...
- 字符串后面空字符的问题(char*与string的转换)
今天AC了不少题,困扰已久的Time limit error 也解决了,记住下次用STL容器的时候一定要清空容器. 其次是字符数组与字符串的浅谈. 字符数组是以'\0'结尾的,所以在字符数组赋值给字符 ...
- python(简介)
python发展史: 自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程. Python的创始人为荷兰人吉多·范罗苏姆 [3] (Guido van ...
- 题目分享R
题意:有n只蚂蚁在木棍上爬行,每只蚂蚁的速度都是每秒1单位长度,现在给你所有蚂蚁初始的位置(蚂蚁运动方向未定),蚂蚁相遇会掉头反向运动,让你求出所有蚂蚁都·掉下木棍的最短时间和最长时间. 分析:(其实 ...
- 用Redislive监控redis
注意:RedisLive是使用Python2.x编写,建议使用2.7,本次环境为Centos 7.2,默认Python版本2.7. 项目地址:https://github.com/nkrode/Red ...
- blesta运行造成阿里云服务器CPU频繁超载的原因分析
博主在阿里云服务器上安装了主机软件Blesta后,阿里云后台频繁提示CPU超载,打开突发性能模式后,发现CPU负载到了100%.如下图所示: 直接在putty里面reboot整个系统后,负载瞬间降为2 ...
- 【Hadoop离线基础总结】Hue的简单介绍和安装部署
目录 Hue的简单介绍 概述 核心功能 安装部署 下载Hue的压缩包并上传到linux解压 编译安装启动 启动Hue进程 hue与其他框架的集成 Hue与Hadoop集成 Hue与Hive集成 Hue ...
- Linux内核驱动学习(四)Platform设备驱动模型
Linux platform设备驱动模型 文章目录 Linux platform设备驱动模型 前言 框架 设备与驱动的分离 设备(device) 驱动(driver) 匹配(match) 参考 前言 ...
- Tomcat服务器的下载与安装,修改端口号
安装及简单配置Tomcat服务器: 1.登录www.apache.org 网站,之后点击Projects , 点击Project List,找到Tomcat. 2.点击Tomcat之后,之后进入Tom ...
- HDU 3874 Necklace 区间查询的离线操作
题目: http://acm.hdu.edu.cn/showproblem.php?pid=3874 对需要查询的区间按右端点排序,然后从左到右依次加入序列中的元素,同时更新,更新的方法是,把上一次出 ...