1、继承 封装 多态是面向对象的三大特点,当年在考c++期末考试时候这三个特点还是作为填空题出现的。

而且老师也反复唠叨继承封装 多态,这三个词语是背得滚瓜烂熟了,但因为不是特别专业的计算机科班,学得不深入,只是能背着三个词语。

2、直到好几年上班后,经过了长时间的面向过程写代码和面向对象写法实践对比才更有体会。

最近 任务很多,对我来说都是新任务,但是都是老任务别人做的我现在接手。

3、因为写那些代码的人很多,所以风格也很多,但基本有一点相同的是都是向过程的风格。也就是代码里面完全看不到class关键字。

也看过有人写class,但让我很吃惊,这个class类写得很极端,这需要我也以此形成总结,引以为戒,激励反思促进。

因为看到的这个是使用了类,是和其他清一色的纯函数编程的代码相比很特殊的,但看了类之后,其实是个100%面向过程的,也就是说只有class关键字外壳,但没有一丝面向对象的思想内涵。

4、怎么判断一个类是不是面向过程的思维呢,抛开继承 封装 多态这么宽泛的概念不说。其实可以判断的方法之一是看类里面的方法,是不是都很频繁的return和传参,是不是很少用到实例属性,是不是有多个方法的参数传参代表的意义是传入的是同一个东西,如果符合这个特点,90%的可能性就是在使用纯面向过程了,这种情况下其实写个类是没什么鸟用的,只是把命名空间下沉了一级,而且由于频繁的return和传参导致代码也很难看懂,这种类加方法和面向过程在模块+函数基本上没什么卵区别。没有继承 没有封装 没有多态还叫什么面向对象,尤其是没有封装没那怎么能叫面向对象?

5、在写面向过程时候,为了尽可能模拟多实例或者增加使用灵活性,思维就会形成多return多传参,少写全局变量。但这种思维深入人心之后,再写oop代码就会完全的转不过弯来。

因为频繁 传参 return的代码,读起来很费劲,传参和return一环套一环的,特别是没有类型注释 意义注释 ,很难读懂,oop能很好解决。

在写oop时候,你一定要多联想全局变量,把那些想当多的一部分在面向过程时候需要return和传参的,思维上把他们想象修改为全局变量,然后在写一个类,把全局变量下沉到实例属性,函数下沉到方法,由于少了很多return和传参,代码就能清晰很多了。

关于怎么写一个oop的类,可以参考我的  三步转oo的文章。如果没有这种意识,就算写了个class外壳也是白塔,因为这么写并没有获得一丝的面向对象带来的优点。

python 有class外壳不一定是oop,到底怎么oo?的更多相关文章

  1. Python核心编程读笔 12:OOP

    第13章 面向对象编程 一.基本概念 1.object类是所有类的基类,如果你的类没有继承任何其他父类,object 将作为默认的父类. 2.python创建实例时无需new: myFirstObje ...

  2. python, 面向对象编程Object Oriented Programming(OOP)

    把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数 ...

  3. Python 里的「单分派泛函数」到底是什么?

    泛型,如果你学过Java ,应该对它不陌生吧.但你可能不知道在 Python 中(3.4+ ),也可以实现简单的泛型函数. 在Python中只能实现基于单个(第一个)参数的数据类型来选择具体的实现方式 ...

  4. 用Python来搞副业?这届大学生到底有多野……

    最近,我在知乎上偶然发现一个有意思的问题: 「大学生实习被当作廉价劳动力,你怎么看?」 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很 ...

  5. Python中文件读写之 w+ 与 r+ 到底有啥区别?

    其实r 是只读,只能读不能写,这是很明确的,但是r+是可读写,变成r+后还没太明白到底加了什么,还是照样写不了,有没有这样的体验呢,如下代码,只读时 f = open("test.txt&q ...

  6. 学习笔记(1):零基础掌握 Python 入门到实战-列表与元祖到底该用哪个?(二)...

    立即学习:https://edu.csdn.net/course/play/26676/338778?utm_source=blogtoedu 列表不能通过增加索引增加元素 可以使用list中的app ...

  7. 博客之旅的开始-----什么是Python ? ? ?

    1 .到底什么是Python?你可以在回答中与其他技术进行对比(也鼓励这样做). 答案下面是一些关键点: Python是一种解释型语言.这就是说,与C语言和C的衍生语言不同,Python代码在运行之前 ...

  8. Boost.Python简介

    Boost.Python简单概括:是Boost库的一部分:用来在C++代码中调用python代码以及在Python代码中调用C++代码,并且避免用户直接操作指针. 以下内容搬运自:https://wi ...

  9. Python2.6-原理之类和oop(下)

    来自<python学习手册第四版>第六部分 五.运算符重载(29章) 这部分深入介绍更多的细节并看一些常用的重载方法,虽然不会展示每种可用的运算符重载方法,但是这里给出的代码也足够覆盖py ...

随机推荐

  1. awk mysql

    mysqlbinlog --no-defaults --base64-output=decode-rows -v -v mysql-bin.000002 |awk '/###/{if($0~/UPDA ...

  2. 【jquery】jquery 在 ie6 下无法设置 select 选中的解决方法

    本文主要解决在 ie6 下,jquery 无法设置 select 选中的问题.我们先看个例子: <!DOCTYPE HTML> <html lang="en-US" ...

  3. scrapy爬虫出现Forbidden by robots.txt

    scrapy爬虫出现Forbidden by robots.txt

  4. PCL中IO模块和类的介绍

    I/O模块中共有21个类 (1)class pcl::FIleReader:定义了PCD文件的读取接口,主要用作其他读取类的父类   pcl::FileReader有pcl::PCDReader和pc ...

  5. R matrix 转换为 dataframe

    When I try converting a matrix to a data frame, it works for me: > x <- matrix(1:6,ncol=2,dimn ...

  6. 引用dataframe的值为什么会不同

    在R语言中,通常有一些操作符可以来提取对象的子集,如以下三种: 1.“[” 单层方括号,返回的对象与原对象类型相同,它也可以返回一个对象中的多个元素: 2.“[[” 双层方括号,用来从列表(list) ...

  7. idea+maven无法自动加载jar包

    没有配置maven的环境变量所致 执行mvn -version进行检测

  8. LEARNING TO NAVIGATE IN COMPLEX ENVIRONMENTS

    任务是地图里面导航,让agent从起始点到达指定位置. 用了supervised learning + reinforcement learning + lstm 用supervised learni ...

  9. python-下载百度图片到本地

    import requests import os def getManyPages(keyword,pages): params=[] for i in range(30,30*pages+30,3 ...

  10. python epoll

    需要用python实现中断的功能,所以用epoll监听gpio文件的变化.写个demo测试一下. 参考: http://www.cnblogs.com/coser/archive/2012/01/06 ...