python_14 多态,封装
多态:
由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同。
多态的概念指出了对象如何通过他们的共同的属性和动作来操作及访问,而不需考虑他们的类。
class H2O:
def __init__(self,name,temperature):
self.temperature=temperature
self.name=name def turn(self):
if self.temperature<0:
print('%s 冰'%self.name)
elif self.temperature>100:
print('%s 水蒸气'%self.name)
else:print('%s 水'%self.name) class Water(H2O):
pass class Ice(H2O):
pass class Vapor(H2O):
pass w1=Water('水',25)
i1=Ice('冰',-25)
v1=Vapor('水蒸气',200) def func(obj):
obj.turn() func(w1)
func(i1)
func(v1)
多态实际上依附于继承,多态实际上是继承的实现细节
封装
第一个层面的封装:类本身
第二个层面的封装:类中定义私有的,外部无法访问,python约定,类中单下划线开头的变量和函数外部不可访问,双下划线开头的变量或函数python会重命名,变成_类名__变量名访问
第三个层面的封装:明确区分内外,内部实现逻辑,外部无法知晓,并且为内部封装的逻辑提供一个接口给外部使用。定义接口函数,内部调用私有属性,外部调用接口函数。
面向对象的优点:
面向对象是一种高等级的结构化编程方式
1.通过封装明确内外,内部逻辑外部无需知道,想让你知道的你才能知道
2.通过继承+多态在语言层面支持归一化设计
反射/自省
参考:反射
下列方法使用于类和对象
hasattr(obj,name)判断object中有没有一个name字符串对应的方法或属性
getattr(obj,name,default=None)返回object中name字符串对应的方法或属性,相当于x.'y',没有则报错,可返回defalut设置值
setattr(x,y,v)在object中设置或修改一个方法或属性
delattr(x,y)在object中删除一个方法或属性
class House:
owner='April'
def __init__(self,name,money):
self.name=name
self.money=money def decorate(self):
print('装修花了',self.money) h1=House('Manuel',1000000) print(hasattr(h1,'decorate'))
print(hasattr(h1,'owner')) a=getattr(h1,'owner')
print(a)
b=getattr(h1,'eee','没有这个属性')
print(b) setattr(h1,'style','北欧')
print(h1.__dict__)
c=h1.style
print(c) setattr(h1,'owner','Manuel')
print(h1.owner) print('~~~~~~~~~~~~~')
delattr(h1,'owner')
print(h1.__dict__)
反射/自省的作用:
不影响前人编写代码的情况下,写自己的逻辑
动态导入模块:
若导入模块为字符串,利用__import__('a.b.c')方法,调用的是最顶级的模块,如需导入c模块中的c1函数,
i=__import__('a.b.c')
i.b.c.c1()
或:
与上述方法的区别是直接导入了a.b.c模块
import importlib
m=importlib.import_module('a.b.c')
1
python_14 多态,封装的更多相关文章
- python面向对象之继承/多态/封装
老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(sel ...
- 组合&多态&封装
目录 组合&多态&封装 一.组合 1.1什么是组合 1.2 为什么要用组合 1.3 如何使用组合 1.4 继承和组合都在什么时候用 二.多态与多态性 2.1 什么是多态 2.2 如何用 ...
- 继承 & 多态 & 封装
什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class Par ...
- python面向对象 : 抽象类(接口类),多态,封装(私有制封装)
一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...
- day25类的组合多态封装
类的组合多态与封装类的组合 1. 什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 2. 为何要用组合 通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以 ...
- 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装
抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...
- python oop常用术语 继承 多态 封装
面向对象优点 1.通过封装明确了内外 2.通过继承+多态在语言层面支持了归一化设计 抽象/实现 抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于 绘程序结构,从而实现 ...
- python day - 19 抽象类 接口类 多态 封装
一. 抽象类接口类即制定一个规范 特点: 1.不可被实例化. 2.规范子类当中必须事先某个方法. 3.在python中有原生实现抽象类的方法,但没有原生实现接口类的方法. 例题:制定一个规范就是,子类 ...
- 从零开始—Socket系统调用和多态封装
1 重新搭建实验环境 前面都是用实验楼环境做的实验,偷的懒总是要还的,这一次重装环境前后花了十几个小时,踩了无数的坑. 1.1 Ubuntu和LINUX内核的区别 Ubuntu是基于LINUX内核编写 ...
随机推荐
- Ubuntu 16.04 LTS 安装 miniconda
Ubuntu 16.04 LTS 安装 miniconda 下载 miniocnda 的 bash 文件下载链接 https://conda.io/miniconda.html ,我选择的是 64-b ...
- HTML中引入CSS的四种常用方法及各自的缺点
在HTML中引入CSS的方法主要有四种,它们分别是行内式.内嵌式.链接式和导入式. 1.行内式 行内式是在标记的style属性中设定CSS样式.这种方式没有体现出CSS的优势,不推荐使用.格式如下: ...
- mysql的基础用法,水一下
#和上一篇是一起的,上一篇就是为这个做insert <blockquote>/*思考题*/ create database spj; use spj;create table s( sno ...
- 【java编程】java的关键字修饰符
一.transient java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.换句话来说就是,用transient关键字标记的成员变量不参与序列化 ...
- Visual Studio 2017 Android 调试无法连接到虚拟机
输出窗口输出如下: 1>Starting deploy 4.5" KitKat (4.4) HDPI Phone ... 1>Starting emulator 4.5" ...
- pl/sql oracle数据库中文数据显示异常或者不能使用中文查询的解决办法
1首先我们需要找到pl/sql developer 目录 然后在该目录下 创建一个bat文件 在文件中定义 set NLS_LANG=AMERICAN_AMERICA.UTF8start PLSQLD ...
- 【转】Docker简介与入门
转自:https://segmentfault.com/a/1190000000448808 Docker是个新生的事物,概念类似虚拟化.网上关于Docker入门的东西已经很多了.不过本文探讨了Doc ...
- 更改系统盘符后DFS无法复制故障处理
DFS是微软的分布式文件系统,其中有命名空间和复制功能,我们有文件服务器,平时主要使用的是复制功能,保持文件服务器的数据实时同步,这一台我觉得还挺好用的,可以不借助备份软件就可以实现2台文件服务器的数 ...
- python安装media报错
Try https://pypi.python.org/pypi/setuptools easy_install LEE 我后来,依次在Python2.7中装了 numpy-1.7.0-win32-s ...
- 代码漏洞扫描描述Cross Site History Manipulation解决办法[dongcoder.com]
代码漏洞扫描 漏洞描述:Cross Site History Manipulation 简要描述:产品的行为差异或发送不同的反应,在某种程度上暴露了与安全性相关的产品状态,例如特定的操作是否成功.可能 ...