python学习day22 面向对象(四) 约束&反射
约束
约束子类内必须使用方法,不然主动异常
class BaseMessage(object):
def send(self,a1):
raise NotImplementedError('字类中必须有send方法') class Msg(BaseMessage):
def send(self):
pass class Email(BaseMessage):
def send(self):
pass class Wechat(BaseMessage):
def send(self):
pass class DingDing(BaseMessage):
def send(self):
print('钉钉') obj = Email()
obj.send()
反射
python一切皆对象,所以想要通过字符串的形式操作内部成员都可以通过反射去完成操作.
py文件 包 类 对象...
反射:根据字符串的形式去某个对象操作对象的成员.
getattr(对象名,"方法名")
- 根据字符串的形式去某个对象中获取对象的成员.
- attribute属性
class Foo(object):
def __init__(self,name):
self.name = name
def login(self):
pass
obj = Foo('alex') # 获取变量
v1 = getattr(obj,'name')
# 获取方法
method_name = getattr(obj,'login')
method_name()
setattr(对象名称,"变量",值 )
- 根据字符串的形式去某个对象中设置成员.
class Foo:
pass
obj = Foo()
obj.k1 = 999
setattr(obj,'k1',123) # obj.k1 = 123 print(obj.k1)
hasattr(对象名称,"方法名")
- 根据字符串的形式去某个对象中判断是否含有某成员.返回布尔类型
class Foo:
pass obj = Foo()
obj.k1 = 999
hasattr(obj,'k1')
print(obj.k1)
delattr(对象,"方法名")
根据字符串的形式去某个对象中删除某成员.
class Foo:
pass obj = Foo()
obj.k1 = 999
delattr(obj,'k1')
print(obj.k1)
模块importlib
importlib 用字符串的形式导入模块
模块 = importlib.import_module('utils.redis')
- 示例:
import importlib #用字符串的模式导入模块
redis = importlib.import_module("utils.redis")
#用字符串的形式去对象(模块)找到他的成员
getattr(redis,"func")()self.MIDDLEWARE_CLASSES = [
'utils.session.SessionMiddleware',
'utils.auth.AuthMiddleware',
'utils.csrf.CrsfMiddleware',
]
for mes in self.MIDDLEWARE_CLASSES:
module_path,class_name=mes.rsplit('.',maxsplit=1) #切割路径和类名
module_object = importlib.import_module(module_path) #插入模块-字符串操作
cla=getattr(module_object,class_name) #根据模块对象找到类名(字符串操作-反射)
obj = cla() #实例化对象
obj.process() #运行内部函数process
python学习day22 面向对象(四) 约束&反射的更多相关文章
- python学习之面向对象(四)
6.9 反射 反射是非常重要的内置函数之一. 反射是通过字符串去操作对象相关的属性,这里的对象包括:实列,类,当前模块,其他模块. 主要的四个函数: 查看: hasattr(对象,待查内容的字符串形式 ...
- Python学习之==>面向对象编程(二)
一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...
- python学习心得第四章
python 学习心得第四章 1.lambda表达式 1:什么是lambda表达式 为了简化简单函数的代码,选择使用lambda表达式 上面两个函数的表达式虽然不一样,但是本质是一样的,并且lamb ...
- Python学习笔记(四)
Python学习笔记(四) 作业讲解 编码和解码 1. 作业讲解 重复代码瘦身 # 定义地图 nav = {'省略'} # 现在所处的层 current_layer = nav # 记录你去过的地方 ...
- Python学习系列(四)(列表及其函数)
Python学习系列(四)(列表及其函数) Python学习系列(一)(基础入门) Python学习系列(二)(基础知识) Python学习系列(三)(字符串) 一.基本概念 1,列表是什么? ...
- Python学习系列(四)Python 入门语法规则2
Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, ...
- Python学习笔记(四)函数式编程
高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...
- python学习(十四)面向对象
Python中的面向对象,先写类,会生成类对象,类对象然后创建对象,对象就可以拿来用了. Python支持多重继承. class语句创建类对象,并将其赋值给变量名. class语句内的赋值语句会创建类 ...
- [Python学习笔记][第四章Python字符串]
2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...
随机推荐
- Jinja2用法总结
Jinja2用法总结 一:渲染模版 要渲染一个模板,通过render_template方法即可. @app.route('/about/') def about(): # return rende ...
- 获取元素CSS样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Snapde电子表格编写Exprtk脚本进行数据运算
Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏. 一.打开文件:用Snapde打开需要运算的CSV文件 二.添加行列:在编辑菜单找到设置 ...
- Powershell Linux正式版可用,启动名称有变
CentOS yum install powershell 但并没有powershell这个可执行文件.通过搜索可以发现在powershell目录里有pwsh可执行文件,那么以后就要用pwsh执行了. ...
- 【工作分解法】IT人,你的工作“轻松”么?
一.前言 假如读者是一个老板,下面有两位员工,工作难度一样,完成量一样,人品和责任心也一样.一位每天加班加点,废寝忘食的工作:而另外一位每天在座位上喝着咖啡,非常的轻松自如的工作.您会更器重哪一位? ...
- ASP.NETMVC 分页
<div class="text-center"> <span style="display:inline-block; position:re ...
- SpringBoot Mybatis 使用LocalDateTime
mybatis-spring-boot-starter 2.0.1 会报错,不知道如何解决(建议先不用) mybatis-spring-boot-starter 2.0.1 - 1.3.2 版本不会报 ...
- webapi读取上传的文件流
逻辑说明 这里未引用System.Web.Mvc. 主要使用MultipartMemoryStreamProvider对象从Request中获取文件流. var provider = new Mult ...
- apache ranger源码编译
官方文档 http://ranger.apache.org/quick_start_guide.html Quick Start Guide Build Process 1. Check out th ...
- zabbix proxy
ProxyMode=0 Server=zabbix-server的IPHostname=zabbix proxy(跟在zabbixWED网页建立代理proxies名称一样) LogFile=/data ...