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. Hadoop与Spark之间的比较

    Hadoop与Spark之间的比较 Hadoop框架的主要模块包括如下: Hadoop Common Hadoop分布式文件系统(HDFS) Hadoop YARN Hadoop MapReduce ...

  2. android 中解析json格式数据

    本文来自http://tonysun3544.iteye.com/category/188238 package com.tony.json; import android.app.Activity; ...

  3. python出现UnicodeEncodeError有可能产生的另一个原因

    在使用python中,我们都有可能遇到如下的错误: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ...

  4. MFC函数—— CFrameWnd::OnCreateClient

    CFrameWnd::OnCreateClient virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext*pContext); ...

  5. python 基础干货 02

    list 与 tuple list 类似 数组 tuple 跟 list 一样, 只是一旦定义, 里边的内容不可以改变. 这样, 上边的内容就不可以改变了. "可变的" tuple ...

  6. 给data设置数据

    console.log(JSON.stringify(that.data.navigator[0].content) + "--____+" + JSON.stringify(th ...

  7. Java BEAN与EJB的区别

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean.但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以 ...

  8. android批量插入数据效率对比

    对比在android中批量插入数据的3中方式对比(各插入1W条数据所花费的时间): 1. 一个一个插入 /** * 向表中插入数据 * * @param openHelper * @param app ...

  9. webrtc 在MAC下和iOS下的编译

    一:安装brew和git 1. mkdir /usr/local 2. curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo ...

  10. Android WiFi 日志记录(ASSOC_REJECT)

    记录Android N关联拒绝之后的相关的log. 10-26 20:35:35.844 2215 2215 D wpa_supplicant: * bssid_hint=44:48:c1:d6:57 ...