python_14 多态,封装,反射
多态:
由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同。
多态的概念指出了对象如何通过他们的共同的属性和动作来操作及访问,而不需考虑他们的类。
class H2O:def __init__(self,name,temperature):self.temperature=temperatureself.name=namedef 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):passclass Ice(H2O):passclass Vapor(H2O):passw1=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=nameself.money=moneydef 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 importlibm=importlib.import_module('a.b.c')
1
转载于:https://www.cnblogs.com/Manuel/p/10767282.html
python_14 多态,封装,反射相关推荐
- python教程:封装、多态、反射
一.封装 1.1封装的定义 在程序设计中,封装是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其含义是其他程序无法调用. 要了解封装,离不开"私有化",就是将类或者 ...
- 派生方法的实战演练, 封装,多态,反射
文章目录 派生方法的实战演练 面向对象三大特性之封装 property伪装属性 面向对象三大特性之多态 面向对象之反射 什么是反射? getattr(核心) hasattr settattr dela ...
- 组合,多态,封装, @property
目录 组合 什么是组合 为什么使用组合 如何使用组合 多态 什么是多态 多态性 - 好处 封装 封装是什么意思 @property 组合 什么是组合 - 对象的某一个属性是另一个类的对象 clas ...
- C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记09--构造方法/析构方法/继承/多态/封装...
一.构造方法 当创建一个类时, 系统会自动创建一个默认的无参构造方法, 这个方法和类同名, 在创建对象的时候自动调用. 默认的构造方法里面什么也没有, 重写之后就可以在创建对象的时候同时搞点事情了. ...
- Python全栈开发——面向对象的三大特性(继承 多态 封装)
1.继承 1.两层意思 改变和扩展(详细看随笔继承和组合) 2.多态(体现在运行时的状态) 1.不同的类可以调用相同的方法,得到不同的结果 2.实际上是继承的一种体现机制 class H2o:def ...
- 面向对象-多态,反射
抽象父类 # 抽象父类:拥有抽象方法(子类共有的方法,但是父类不能有具体的实现体)的父类 # 抽象方法:方法名是具体的,但是实现体是抽象的(在子类中重写来具象化) # 注意点:有抽象方法的父类不能 ...
- JAVA多态/封装/接口/包/包的命名规则——java面向对象
Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态的优点 消除类型之间的耦合关系 可替换性 可扩充性 接口性 灵活性 简化性 多态存在的三个必要条件 继承 重写 父类引用指向子类 ...
- python包标准类型和动态导入模块和多态和反射和授权
class List(list):def append(self, p_object):if type(p_object) is str:# self.append(p_object)super(). ...
- Python基础20-面向对象:静态、组合、继承与派生、多态、封装、反射、内置attr方法等
目录 静态 静态属性@property 类方法@classmethod 静态方法@staticmethod 组合 继承与派生 继承与派生 继承顺序 在子类中调用父类方法与super 多态 封装 反射 ...
- 面向对象封装继承多态五大基本原则魔法方法反射
目录 面向对象 三大基本特征 五大基本原则 魔法方法 反射 面向对象 什么是面向对象 使用模板的思想,将世界万事万物使用对象来表示一个类型 面向对象和面向过程的区别: 面向对象的不就是使用程序处理事情 ...
最新文章
- 字符识别Python实现 图片验证码识别
- 控件View动态设置高度时会卡顿、速度慢的情况解决
- 《STL源码剖析》学习--traits
- sqoop2操作流程
- mysql 5.6.30 编译_编译安装mysql 5.6.30
- linux下安装mysql5.5_Linux下安装mysql-5.5
- 基于持续集成的轻量级接口自动化测试 【持续更新...】
- java--迭代(三)foreach解析与字节码
- 例4.5 最小公倍数 - 九度教程第48题(最小公倍数)
- 选择正确的C/C++ runtime library
- 360浏览器+7654联盟
- win10系统迁移后系统重装_win10分区助手迁移系统到SSD固态硬盘的技巧
- PS—制作 抖音 图标
- jquery mysql实现加入购物车_jquery-实现加入购物车效果
- 在CentOS上MySQL数据库服务器配置方法
- stimulsoft oracle,Stimulsoft Reports
- 【下载安装】ps软件下载免费中文版及安装详细步骤教程(photoshop软件下载)
- 初识flowable工作流-实现简单请假流程SpringBoot+VUE
- 《雪盈王》,一本漫画,一个游戏,一场梦……
- 【番外篇】Excel:一行转多行