多态:

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

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

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. Linux第五节课学习笔记

    Linux系统中的一切都是文件,命令就是命令文件. 命令执行分为4步: 1.路径+命令名称. 2.别名.可用alias命令创建别名. 3.内部命令. 4.外部命令.99%的情况都属于第四种.定义这些路 ...

  2. python实现linux下文件遍历

    import os def getAllFile(*names): if len(names) == 0: return "" else: allList = [] for nam ...

  3. angular1中ng-repeat效率优化方法:

    1.当 ng-repeat 的数组被替换时, 它默认并不会重新利用已有的 Dom 元素,而是直接将其全部删除并重新生成新的数组 Dom 元素: 2.Dom 的频繁操作是非常不友好的, ng-repea ...

  4. jQuery事件合成

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...

  5. py-day4-1 python reduce函数

    from functools import reduse    从模块中导入 reduce函数: 处理一个序列,然后把序列进行合并操作 #**** 问题:求1+2+3+100的和是多少? # 一,原始 ...

  6. 自己DIY出来一个JSON结构化展示器

    说来也巧,这个玩意,一直都想亲手写一个,因为一直用着各种网上提供的工具,觉得这个还是有些用途,毕竟,后面的实现思路和原理不是太复杂,就是对json的遍历,然后给予不同节点类型以不同的展现风格. 我这次 ...

  7. 小梵同学 GO!

    刘德翠 1. Vue.js实战读书笔记(1) 2.Vue.js实战读书笔记--计算属性 3. Vue.js实战读书笔记--v-bind及class与style绑定 4. Vue.js实战读书笔记--内 ...

  8. 嵌入式全志V3s荔枝派板卡移植 aircrack-ng

    我使用的是aircrack-ng-1.1.tar.gz这个版本的包. 编辑common.mak,在27行COMMON_FLAGS = 下加入嵌入式开发的环境 -I 和 -L : COMMON_CFLA ...

  9. 【如皋OJ】1127:正整数N转换成一个二进制数

    1127: 正整数N转换成一个二进制数 时间限制: 1 Sec  内存限制: 128 MB提交: 85  解决: 59[提交] [状态] [讨论版] [命题人:zhuzhigang] 题目描述 输入一 ...

  10. Linux运维小知识

    自己日常用到的命令稍微备份一下: 版本确认 CentOS / RedHat Enterprise cat /etc/redhat-release Ubuntu cat /etc/lsb-release ...