s21day22 python笔记

一、内容回顾及补充

  1. 模块补充
  • importlib.import_module:通过字符串的形式导入模块

    #示例一:
    import importlib
    # 用字符串的形式导入模块。
    redis = importlib.import_module('utils.redis')
    
    # 用字符串的形式去对象(模块)找到他的成员。
    getattr(redis,'func')()
    
    #示例二:
    import importlib
    middleware_classes = [
        'utils.redis.Redis',
        # 'utils.mysql.MySQL',
        'utils.mongo.Mongo'
    ]
    for path in middleware_classes:
        module_path,class_name = path.rsplit('.',maxsplit=1)
        module_object = importlib.import_module(module_path)# from utils import redis
        cls = getattr(module_object,class_name)
        obj = cls()
        obj.connect()
  1. 可迭代对象补充

    • 表象:可以被for循环的对象就可以称为是可迭代对象

    • 如何让一个对象变成可迭代对象?

      • 在类中实现__iter__方法且返回一个迭代器(生成器)
      # 示例一:
      class Foo:
          def __iter__(self):
              return iter([1,2,3,4])
      
      obj = Foo()
      
      # 示例二:
      class Foo:
          def __iter__(self):
              yield 1
              yield 2
              yield 3
      
      obj = Foo()
    • 注意:只要能被for循环,就是去看他内部的__iter__方法

二、数据结构

2.1 队列

  • 先进先出

2.2 栈

  • 后进先出

    class Stack(object):
        """
        后进先出
        """
        def __init__(self):
            self.data_list = []
        def push(self, val):
            """
            向栈中压入一个数据(入栈)
            """
            self.data_list.append(val)
        def pop(self):
            """
            从栈中拿走一个数据(出栈)
            """
            return self.data_list.pop()

三、 约束

  • 示例

    # 约束子类中必须写send方法,如果不写,则调用时候就报抛出 NotImplementedError
    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 DingDing(BaseMessage):
        def send(self):
            print('钉钉')
    
    obj = Email()
    obj.send()

四、 反射

  • 根据字符串的形式去某个对象中操作他的成员

4.1 getattr(对象,字符串)

  • 根据字符串的形式去某个对象中获取该成员

    class Foo(object):
        def __init__(self,name):
            self.name = name
    obj = Foo('alex')
    
    # 获取变量
    v1 = getattr(obj,'name')
    # 获取方法
    method_name = getattr(obj,'login')
    method_name()

4.2 hasattr(对象,字符串)

  • 根据字符串的形式去某个对象中判断是否有该成员

    from wsgiref.simple_server import make_server
    class View(object):
        def login(self):
            return '登陆'
        def logout(self):
            return '等处'
        def index(self):
            return '首页'
    
    def func(environ,start_response):
        start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
        obj = View()
        # 获取用户输入的URL
        method_name = environ.get('PATH_INFO').strip('/')
        if not hasattr(obj,method_name):
            return ["sdf".encode("utf-8"),]
        response = getattr(obj,method_name)()
        return [response.encode("utf-8")  ]
    
    # 作用:写一个网站,用户只要来方法,就自动找到第三个参数并执行。
    server = make_server('192.168.12.87', 8000, func)
    server.serve_forever()

4.3 setattr(对象,字符串,值)

  • 根据字符串的形式去某个对象中设置/修改该成员

    class Foo:
        pass
    
    obj = Foo()
    obj.k1 = 999
    setattr(obj,'k1',123) # obj.k1 = 123
    print(obj.k1)

4.4 delattr(对象,字符串)

  • 根据字符串的形式去某个对象中删除该成员

    class Foo:
        pass
    
    obj = Foo()
    obj.k1 = 999
    delattr(obj,'k1')
    print(obj.k1)

4.5 python一切皆对象

  1. 对象的定义

    • 狭义:类实例化出来的就是对象
    • 广义:
      • 模块(py文件)及其内部成员
      • 包(文件夹)及其内部成员
      • 类及其内部成员
      • 狭义的对象
  2. python一切皆对象,所以以后想要通过字符串的形式操作其内部成员都可以通过反射的机制实现

s21day22 python笔记的更多相关文章

  1. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  2. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  3. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  4. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  5. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  6. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  7. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  8. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  9. python笔记 - day7

    python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...

随机推荐

  1. scrapy 入门爬取新闻

    为文本分类实验爬取数据集,要求一百万,分类>10类. 参考链接:http://litianyi.cc/technology/2015/12/01/text-classification-1/ 文 ...

  2. C# Thread IsAlive 理解

    IsAlive的功能就是判断当前线程是否处于活动状态. public class Program { public static void Main(string[] args) { try { Wr ...

  3. 关于:无法创建链接服务器 "ORCL" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 的实例 (错误:7302)

    本人接触和使用Oracle数据库才有一个季度的时间,问题比较白,大神请无视本文. 环境: 1.数据服务器,windows2008R2,Oracle11g 2.报表服务器,windows2008R2,S ...

  4. 获取Promise的值

    //response.text()是一个promise对象 //通过then方法获取promise存的数据 response.text().then(val => { errObj = JSON ...

  5. 第三方jar包导入unity

    关于第三方SDK接入Unity工程方面,有许多坑,下面我把遇到的问题进行总结,希望能够帮到有需要的朋友们.1.把第三方SDK导入Eclipse遇到的问题.eclipse配置完成右键工程后没有andro ...

  6. Problem after converting keras model into Tensorflow pb - 将keras模型转换为Tensorflow pb后的问题

    I'm using keras 2.1.* with tensorflow 1.13.* backend. I save my model during training with .h5 forma ...

  7. 关于angular 的路由title设置

    在主模块下 constructor( private router: Router, private activatedRoute: ActivatedRoute, ) {} this.router. ...

  8. npm由来和作用

    npm由来 本文转载自: https://blog.csdn.net/qq_37696120/article/details/80507178 npm作用 本文转载自: https://www.cnb ...

  9. SpringBoot 2.0 pom.xml 配置(热启动)

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven ...

  10. rtp传输音视频(纯c代码)

    参考链接: 1. PES,TS,PS,RTP等流的打包格式解析之RTP流 https://blog.csdn.net/appledurian/article/details/73135343   2. ...