Python站
  • 说明
  • 源码分析
  • 100 系列
  • python
    • 开发基础
      • 数据类型
      • 字符编码
      • 文本操作
      • 玩转Python100解
    • 函数编程
      • 装饰器
      • 内置函数
        • vars
      • 内置模块
        • enum
        • os
        • argparse
        • importlib
        • shelve
        • collections
        • re
      • 神奇三方
        • setuptools
        • celery
    • 面向对象
      • 面向对象100解(草稿)
    • 网络编程
      • 网络理论知识
      • 网络编程socket
      • socketserver源码泛读
    • 并发编程
      • 并发编程之多进程
        • 子进程基本使用
        • 进程的属性或方法
        • 守护进程
        • 互斥锁
        • 队列
        • 生产者消费者模型
      • 并发编程之多线程
        • 子线程基本使用
        • GIL全局解释器锁
        • 死锁现象与递归锁
        • 信号量事件定时器
        • 线程队列queue
      • 并发编程之进程线程池
      • 并发编程之协程
      • 并发编程之IO模型
        • 阻塞IO
        • 非阻塞IO
        • 多路复用IO
        • 异步IO
        • IO模型比较分析
    • 数据库说
      • mongoengine源码精读
    • 前端开发
    • 后端开发
      • flask源码精读
      • django源码精读
        • 01 软件打包与部署
        • 02 python调试工具 pdb
        • 03 创建一个django项目
    • 爬虫相关
      • Jupyter Notebook
      • urllib
      • urllib3源码泛读
      • 数据解析
      • requests源码精读
        • 初始化说 __init__.py
        • 版本信息 __version__.py
        • 版本兼容 compat.py
        • 经典视图 api.py
        • 逻辑实现 sessions.py
        • 数据存储 models.py
        • 网络传输 adapters.py
        • 异常结构 exceptions.py
        • 交互协定 status_code.py
        • 钩子编程 hooks.py
        • 数据结构 structures.py
        • 辅助输出 utils.py
        • 安全认证 auth&certs.py
    • 编程思想
      • 算法
      • 数据结构
      • 设计模式
        • 简单工厂模式
        • 工厂方法模式
        • 抽象工厂模式
        • 建造者模式
        • 单例模式
        • 适配器模式
        • 桥模式
        • 组合模式
        • 外观模式
        • 代理模式
        • 责任链模式
        • 观察者模式
        • 策略模式
        • 模板方法模式
      • Python技巧100解
      • Effective Python
    • 企业应用
      • DevOps
      • Web服务-Nginx
      • 网站发布
      • 源码管理
        • Git
        • GitHub
        • GitLab
      • Golang
      • Docker
      • Ubuntu
    • 项目实战
    • 就业相关
    • 其他爱好
      • 科技单词100解答
Powered by GitBook
On this page
  1. python
  2. 面向对象

面向对象100解(草稿)

感性角度理解面向对象,启发思路

  • 类内部定义了相关绑定方法,可以把这些绑定方法内部逻辑统一看做一个大的作用域空间,用self来标识。实现了大一统之后,再来看def func(self):pass 定义的小空间,可理解为截取大一统的某段数据对外提供的小接口

  • 实现一个绑定方法 def func(self):pass,已知信息包括,内置函数,内置模块,第三方模块,自定义其他模块的功能方法,以及重要的self,其中有数据属性和方法属性

  • 网络传递信息的时候,必然有请求与响应,可以把所有请求的信息封装成Request对象,从服务器返回的信息封装成Response对象;

  • 设计类时会根据需要初始化属性数据,然后再此基础上定义层级结构良好的绑定方法,requests模块的Response类是特别好的学习案例

  • 类可看做是一系列数据的集合,如ORM,可以在类的基础上,定义不同的函数,如get_custom_by_id, save_custom_info等等,函数内实现各种逻辑判断,调用方直接使用这些函数,不用直接操作底层类,这样结构层次更加清晰

  • self 可以形象的看做一个连接 connection,从而获取自己想要的属性和方法(直接获取返回值,或方法去操作属性,或工具类小功能),定义连接的过程即定义类

self.adapters = {}
self.mount('http', 'adapter1')
self.mount('https', 'adapter2')

def mount(self, prefix, adapter):
    self.adapters[prefix] = adapter

def get_adapter(url):
    for (prefix, adapter) in self.adapters.items():
        if url.lower().startswith(prefix.lower()):
            return adapter

adapter = self.get_adater('http://www.baidu.com')
  • self 可以看做一个存储库,定义类相关字段即属性,属性的值可以直接赋值,也可以通过方法来进行赋值

  • self可以看做一条绳

  • self可以看做一棵树

  • 类绑定方法,可充当创建类实例的工厂方法

class Klass(object):

    @classmethod
    def create(cls):
        # 在此可以实例化对象,联系在函数内部调用函数
        print('cls from create: %s' % id(cls))
        print('Klass from create: %s' % id(cls))

print('Klass from outer: %s' % id(Klass))
Klass.create()

>>> Klass from outer: 2302430114984
>>> cls from create: 2302430114984
>>> Klass from create: 2302430114984

  • 定义一个类,可以看做一个总计划的制定过程,类名即计划项目名,类的继承即公用的计划模板,类的作用域字典即完成计划需要执行的步骤。我们总会说定义类时没有执行,这句话得分开来理解,没有执行的是计划落实的具体步骤,而执行的是制定计划的过程,最后的结果是有类似计划的说明文档,如类的定义

  • 编程可简单理解为对数据的操作,数据+操作,list or dict 首先作为数据的存储容器,然后再附加一些列操作。面向对象中的__init__方法定义了可以存储哪些数据,然后再定义操作这些数据的方法。其实完全可以为各个对象单独定义自己的处理方法,来达到操作数据的目的,但是这样写就会出现大量重复代码,并且函数是无状态的,只要输入值确定,函数的结果都是确定了,所以把函数提升到类的定义中,所有的实例共用类定义的方法即可

  • 继承是面向对象的重要特性,在理解的时候完全可认为复制了父类的功能,粘贴到子类,然后在改改。我们对自己熟悉的操作:复制粘贴,印象深刻,迁移嫁接过去是学习的好方法

  • 一个优秀的类,内部的方法一定是有层级和先后顺序的,如处理MapReduce流程的类,先map,在reduce

  • 宽泛的讲,调用工厂函数list(),类实例化PathInputData(path), LineCountWorker(input_data),都是产生对象的一种方式,甚至@classmethod的绑定方法中实现cls()也可以产生类,要统一理解

  • 我们必须把对象构建出来才能体现出那些类的意义,谁来负责构建对象并协调流程呢?最简单的办法是手工构建相关对象,并通过某些辅助函数将这些对象联系起来。

封装、继承、多态,作用域,产生对象,

Previous面向对象Next网络编程

Last updated 5 years ago