python 有class外壳不一定是oop,到底怎么oo?
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?的更多相关文章
- Python核心编程读笔 12:OOP
第13章 面向对象编程 一.基本概念 1.object类是所有类的基类,如果你的类没有继承任何其他父类,object 将作为默认的父类. 2.python创建实例时无需new: myFirstObje ...
- python, 面向对象编程Object Oriented Programming(OOP)
把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数 ...
- Python 里的「单分派泛函数」到底是什么?
泛型,如果你学过Java ,应该对它不陌生吧.但你可能不知道在 Python 中(3.4+ ),也可以实现简单的泛型函数. 在Python中只能实现基于单个(第一个)参数的数据类型来选择具体的实现方式 ...
- 用Python来搞副业?这届大学生到底有多野……
最近,我在知乎上偶然发现一个有意思的问题: 「大学生实习被当作廉价劳动力,你怎么看?」 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很 ...
- Python中文件读写之 w+ 与 r+ 到底有啥区别?
其实r 是只读,只能读不能写,这是很明确的,但是r+是可读写,变成r+后还没太明白到底加了什么,还是照样写不了,有没有这样的体验呢,如下代码,只读时 f = open("test.txt&q ...
- 学习笔记(1):零基础掌握 Python 入门到实战-列表与元祖到底该用哪个?(二)...
立即学习:https://edu.csdn.net/course/play/26676/338778?utm_source=blogtoedu 列表不能通过增加索引增加元素 可以使用list中的app ...
- 博客之旅的开始-----什么是Python ? ? ?
1 .到底什么是Python?你可以在回答中与其他技术进行对比(也鼓励这样做). 答案下面是一些关键点: Python是一种解释型语言.这就是说,与C语言和C的衍生语言不同,Python代码在运行之前 ...
- Boost.Python简介
Boost.Python简单概括:是Boost库的一部分:用来在C++代码中调用python代码以及在Python代码中调用C++代码,并且避免用户直接操作指针. 以下内容搬运自:https://wi ...
- Python2.6-原理之类和oop(下)
来自<python学习手册第四版>第六部分 五.运算符重载(29章) 这部分深入介绍更多的细节并看一些常用的重载方法,虽然不会展示每种可用的运算符重载方法,但是这里给出的代码也足够覆盖py ...
随机推荐
- [openssl]openssl特定版本安装
卸载旧版本 OpenSSL1. apt-get purge openssl2. rm -rf /etc/ssl #删除配置文件编译与安装 OpenSSLprefix 是安装目录,openssldir ...
- Java多线程编程中Future模式的详解<转>
Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...
- OPC UA
OPC UA将来自不同厂商不同设备的数据进行统一格式.统一显示. OPC: originally knowns as “OLE for Process Control”, now “Open Plat ...
- win10老提示系统错误,要注销
win10老提示系统错误,要注销? 开启user manager 服务(对我没用) 用administrator账户(成功,不提示了) 或者创建一个新账户(未测)
- c# comboBox输出图文效果
核心代码:重写DrawItem事件 void Event_CboDrawItem(object sender, DrawItemEventArgs e) { ) return; var cbo = s ...
- Hbase 学习(九) 华为二级索引(原理)
这个是华为的二级索引方案,已经开放源代码了,下面是网上的一篇讲解原理的帖子,发出来和大家共享一下. 经过本人认真阅读了一下代码,发现这个源码仅供参考,想要集成到原有的集群当中是有点儿难度的,它对hba ...
- JavaScript cookie操作实现点赞功能
JavaScript cookie操作实现点赞功能 参考实现原理,但是代码不够简洁,简洁代码参考:js操作cookie 实现一个点赞功能十分简单,主要问题在于不能重复点赞. 若是一个有用户的网站,可 ...
- Could not autowire field: private java.lang.Integer com.taotao.sso.service.impl.UserServiceImpl.SSO_
@Value("REDIS_USER_SESSION_KEY") private String REDIS_USER_SESSION_KEY; 1 2 改正: @Value(&qu ...
- 点击input 禁止手机自带键盘弹出
<input readonly data-field="date" placeholder="請選擇結束時間" class="start_t ...
- css3动画属性系列之transform细讲scale缩放
下面我们从3个方面开始介绍: 1.scale(x,y) 对元素进行缩放 X表示水平方向缩放的倍数 | Y表示垂直方向的缩放倍数 Y是一个可选参数,没有设置的话,则表示X,Y两个方向的缩放倍数是一样的. ...