多态:

由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同。

多态的概念指出了对象如何通过他们的共同的属性和动作来操作及访问,而不需考虑他们的类。

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 多态,封装的更多相关文章

  1. python面向对象之继承/多态/封装

    老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(sel ...

  2. 组合&多态&封装

    目录 组合&多态&封装 一.组合 1.1什么是组合 1.2 为什么要用组合 1.3 如何使用组合 1.4 继承和组合都在什么时候用 二.多态与多态性 2.1 什么是多态 2.2 如何用 ...

  3. 继承 & 多态 & 封装

    什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class Par ...

  4. python面向对象 : 抽象类(接口类),多态,封装(私有制封装)

    一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...

  5. day25类的组合多态封装

    类的组合多态与封装类的组合 1. 什么是组合  组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 2. 为何要用组合  通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以 ...

  6. 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装

    抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...

  7. python oop常用术语 继承 多态 封装

    面向对象优点 1.通过封装明确了内外 2.通过继承+多态在语言层面支持了归一化设计 抽象/实现 抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于 绘程序结构,从而实现 ...

  8. python day - 19 抽象类 接口类 多态 封装

    一. 抽象类接口类即制定一个规范 特点: 1.不可被实例化. 2.规范子类当中必须事先某个方法. 3.在python中有原生实现抽象类的方法,但没有原生实现接口类的方法. 例题:制定一个规范就是,子类 ...

  9. 从零开始—Socket系统调用和多态封装

    1 重新搭建实验环境 前面都是用实验楼环境做的实验,偷的懒总是要还的,这一次重装环境前后花了十几个小时,踩了无数的坑. 1.1 Ubuntu和LINUX内核的区别 Ubuntu是基于LINUX内核编写 ...

随机推荐

  1. android开发解决Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. > java.lang.RuntimeException: java.lang.RuntimeException: c.....

    网上常见的方法我都试过,都没能解决,偶然看到的一个方法解决了,在这了记录一下. 在App目录下的build.gradle的android{ ...  ....}中添加如下代码,即可解决.(xx.xx. ...

  2. C# DataView数据处理的几种方法

    1.找到刚删除的所有列 DataView dv = dt.DefaultView; dv.Delete(); dv.Delete(); //找出所有刚删除掉的行 1.5 dv.RowStateFilt ...

  3. zabbix安装源

    使用zabbix安装源可以避免版本不同的问题,自己根据自己的需求选择对应的版本即可 http://repo.zabbix.com/zabbix/

  4. jmeter的简单http接口用法

    1.  jmeter的启动:windows下的环境 进入jmeter的并目录双击启动 Mac电脑 进入bin目录找到jmeter.sh 文件 在终端执行./jmeter.sh 或者./jmeter. ...

  5. KiCad 一款强大的 BOM 和 装配图生成插件

    KiCad 一款强大的 BOM 和 装配图生成插件 可以生成 BOM 和在线的图形. https://github.com/openscopeproject/InteractiveHtmlBom In ...

  6. Linux printf命令详解

    Linux printf命令 printf命令模仿了C语言中的printf()函数.主要作用是输出文本,按照我们指定的格式输出文本.还有一个输出文本的命令echo,在输出文本时,echo会换行.pri ...

  7. C# Winform 中使用FTP实现软件自动更新功能

    实现思路:通过访问FTP站点,将站点中的文件下载至软件指定位置. 第一步:FTP站点中导入需要下载更新的程序文件,并添加配置文件(配置下载后文件的下载路径),如下图所示: 第二步:Winfrom程序读 ...

  8. Ruby版快速排序

    class Array def quick_sort return self if self.length<=1 k = self[0] head = 0 tail = self.length ...

  9. python基础知识16---函数补充

    一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...

  10. 自定义页面微信、微博、QQ分享效果

    几行简单的分享代码既可以实现,先看下效果: 第一步:页面因为结构代码 <div id="freebtn"> <ul> <li class=" ...