约束

  • 约束子类内必须使用方法,不然主动异常

    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 面向对象(四) 约束&反射的更多相关文章

  1. python学习之面向对象(四)

    6.9 反射 反射是非常重要的内置函数之一. 反射是通过字符串去操作对象相关的属性,这里的对象包括:实列,类,当前模块,其他模块. 主要的四个函数: 查看: hasattr(对象,待查内容的字符串形式 ...

  2. Python学习之==>面向对象编程(二)

    一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...

  3. python学习心得第四章

     python 学习心得第四章 1.lambda表达式 1:什么是lambda表达式 为了简化简单函数的代码,选择使用lambda表达式 上面两个函数的表达式虽然不一样,但是本质是一样的,并且lamb ...

  4. Python学习笔记(四)

    Python学习笔记(四) 作业讲解 编码和解码 1. 作业讲解 重复代码瘦身 # 定义地图 nav = {'省略'} # 现在所处的层 current_layer = nav # 记录你去过的地方 ...

  5. Python学习系列(四)(列表及其函数)

    Python学习系列(四)(列表及其函数) Python学习系列(一)(基础入门) Python学习系列(二)(基础知识) Python学习系列(三)(字符串) 一.基本概念 1,列表是什么?     ...

  6. Python学习系列(四)Python 入门语法规则2

    Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, ...

  7. Python学习笔记(四)函数式编程

    高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...

  8. python学习(十四)面向对象

    Python中的面向对象,先写类,会生成类对象,类对象然后创建对象,对象就可以拿来用了. Python支持多重继承. class语句创建类对象,并将其赋值给变量名. class语句内的赋值语句会创建类 ...

  9. [Python学习笔记][第四章Python字符串]

    2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...

随机推荐

  1. Spring Boot 2.X 如何优雅的解决跨域问题?

    一.什么是源和跨域 源(origin)就是协议.域名和端口号.URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口全部相同,则表示他们同源.否则,只要协议.域名.端口有任何一个不同,就 ...

  2. 【转】JavaSE面试题目收集

    1.是否可以从一个static方法内部发出对非static方法的调用? 不可以.当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用, ...

  3. 迭代器模式 Iterator 行为型 设计模式(二十)

    迭代器模式(Iterator)   走遍天下,世界那么大,我想去看看   在计算机中,Iterator意为迭代器,迭代有重复的含义,在程序中,更有“遍历”的含义 如果给定一个数组,我们可以通过for循 ...

  4. Apache2配置多域名站点及支持https

    0x00 预备条件 申请SSL证书 建立对应站点目录 开放443端口 0x01 配置sites-available文件 执行 vi /etc/apache2/sites-available/zecoc ...

  5. Python 基于pykafka简单实现KAFKA消费者

    基于pykafka简单实现KAFKA消费者   By: 授客 QQ:1033553122         1.测试环境 python 3.4 zookeeper-3.4.13.tar.gz 下载地址1 ...

  6. deepin linux学习笔记(四)进不去图形界面怎么办?

    目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...

  7. Spark RPC框架源码分析(三)Spark心跳机制分析

    一.Spark心跳概述 前面两节中介绍了Spark RPC的基本知识,以及深入剖析了Spark RPC中一些源码的实现流程. 具体可以看这里: Spark RPC框架源码分析(二)运行时序 Spark ...

  8. Spark MLlib FPGrowth关联规则算法

    一.简介 FPGrowth算法是关联分析算法,它采取如下分治策略:将提供频繁项集的数据库压缩到一棵频繁模式树(FP-tree),但仍保留项集关联信息.在算法中使用了一种称为频繁模式树(Frequent ...

  9. maven中央仓库、远程仓库地址

    1.http://repo1.maven.org/maven2 (官方,速度一般) 2.http://maven.aliyun.com/nexus/content/repositories/centr ...

  10. 使用ranger对kafka进行鉴权

    使用ranger对kafka进行鉴权测试环境:ranger-kafka-plugin为0.6.3版本,kafka版本为kafka_2.10-0.10.1.1,且kafka broker为一个节点.一. ...