面向对象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 可以看做一个存储库,定义类相关字段即属性,属性的值可以直接赋值,也可以通过方法来进行赋值
self可以看做一条绳
self可以看做一棵树
类绑定方法,可充当创建类实例的工厂方法
定义一个类,可以看做一个总计划的制定过程,类名即计划项目名,类的继承即公用的计划模板,类的作用域字典即完成计划需要执行的步骤。我们总会说定义类时没有执行,这句话得分开来理解,没有执行的是计划落实的具体步骤,而执行的是制定计划的过程,最后的结果是有类似计划的说明文档,如类的定义
编程可简单理解为对数据的操作,数据+操作,list or dict 首先作为数据的存储容器,然后再附加一些列操作。面向对象中的__init__方法定义了可以存储哪些数据,然后再定义操作这些数据的方法。其实完全可以为各个对象单独定义自己的处理方法,来达到操作数据的目的,但是这样写就会出现大量重复代码,并且函数是无状态的,只要输入值确定,函数的结果都是确定了,所以把函数提升到类的定义中,所有的实例共用类定义的方法即可
继承是面向对象的重要特性,在理解的时候完全可认为复制了父类的功能,粘贴到子类,然后在改改。我们对自己熟悉的操作:复制粘贴,印象深刻,迁移嫁接过去是学习的好方法
一个优秀的类,内部的方法一定是有层级和先后顺序的,如处理MapReduce流程的类,先map,在reduce
宽泛的讲,调用工厂函数list(),类实例化PathInputData(path), LineCountWorker(input_data),都是产生对象的一种方式,甚至@classmethod的绑定方法中实现cls()也可以产生类,要统一理解
我们必须把对象构建出来才能体现出那些类的意义,谁来负责构建对象并协调流程呢?最简单的办法是手工构建相关对象,并通过某些辅助函数将这些对象联系起来。
封装、继承、多态,作用域,产生对象,
Last updated