首先我是辣鸡,然后这个问题的确有点意思

首先,类是一个集合,包含了数据,操作描述的一个抽象集合

你可以首先只把类当做一个容器来使用

class Cycle:def __init__(self,r):self.pi=3.14self.r=r
a=Cycle(4)
b=Cycle(7)

你看,我们定义了一个 Cycle 类,我们现在只是将它当做一个数据集合来用,我们利用其实例之间彼此数据隔离的特性来保证具体的实例数据彼此不污染。好了你现在想问,为什么我们要用数据集合来放数据

好了,我们来看看没有类之前我们会怎么样,假设我们现在要计算圆的面积

def square(r,pi):return pi * (r**2)
PI=3.14
a_r=4
a_square=square(a_r,PI)
b_r=7
b_square=square(b_r,PI)

看起来没有问题,好了,现在问题来了,假如,你现在要计算很多圆的面积,那么你是不是发现,不断的用变量命来隔离数据方式变得越来越脏了。而且你发现是不是有很多冗余的代码

好了我们这么改一改

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Cycle:def __init__(self,r):self.pi=3.14self.r=rdef square(value):if not isinstance(value,Cycle):raise ValueError("value muse be Cycle instace")value.square=value.pi * (value.r**2)a=Cycle(4)
b=Cycle(7)square(a)
square(b)

好了,你有没有觉得现在清晰了一点。

好了,现在我们现在还可以改一下

class Cycle:def __init__(self,r):self.pi=3.14self.r=rdef square(self,value):return self.pi * (self.r**2)

好了,现在你可能迷惑了,我们为啥要把 square 函数放在类中?

好了,我现在要计算长方形,原型,梯形各种各样二维几何图形的面积,这样该怎么写???

你想了想我们之前说的将类作为数据容器,你想了想写了如下的代码

class Rectangle:def __init__(self,length,height):self.length=lengthself.height=height
class Cycle:def __init__(self,r):self.pi=3.14self.r=r
def rec_square(value):if not isinstance(value,Rectangle):raise ValueError("value muse be Rectangle instace")value.square=value.length * value.height
def cycle_square(value):if not isinstance(value,Cycle):raise ValueError("value muse be Cycle instace")value.square=value.pi * (value.r**2)

你想一想,这样是不是感觉如果计算需求越来越多,代码是不是还是会越来越脏?

如果我们将函数放在类里,并且用继承的特性,我们可以写出这样的代码

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Geometry:def get_square(self):raise NotImplementedErrorclass Rectangle(Geometry):def __init__(self,length,height):self.length=lengthself.height=heightdef get_square(self):return self.length*self.heightclass Cycle(Geometry):def __init__(self,r):self.pi=3.14self.r=rdef get_square(self):return self.pi * (self.r**2)def square(value):if not isinstance(value,Geometry):raise ValueError("value muse be Geometry instace")value.square=value.get_square()

你看,我们现在只需要给用户暴露一个统一的接口,用户(用户也以是我们自己)不需要关心怎么样选择正确的函数,他只需要调用统一的 square 函数,就可以获取到具体的面积,是不是轻松很多了??

所以,类,它是对数据,操作的一种封装,这个封装的意义在于我们可以去更好的优化代码结构。

好了再举一个例子,我们可以用类来控制访问权限

class People:def __init__(self,website):self.__favorite_website="1024.com"def bad_or_not(self):return self.__favorite_website=="1024.com"

你看,我们用 private 变量,来确保外部没法直接访问一些敏感数据(实际上 Python 里 private 并不严格,hook 一下还是可以访问的)

好,在举一个例子

class People:def __init__(self,website):self.__favorite_website="1024.com"def bad_or_not(self):return self.__favorite_website=="1024.com"@propertydef favorite_website(self):return self.__favorite_website@favorite_website.setterdef favorite_website(self,value):if value=="1024.com":raise ValueError("你不能去草榴,兄弟,你营养不足")self.__favorite_website=value

你看,我们现在很方便的实现在设置数据值的时候,对其过滤。

撤了这么多,回到你的问题

首先A君说的没毛病,但我想知道仅仅使用函数锤子,螺丝刀来完成一个项目比使用Class工厂+函数锤子来完成一个项目的效率会更低么?
理由是什么?大神在什么时候会考虑使用Class来提高代码的“执行效率”和代码的“可读性”。回归实际情况,我很多时候都是调用同一个函数/方法去输出某个结果。
至今还想不出为什么调用Class会更方便?(PS:本人大菜鸟,写了上千行代码了,但仍然搞不懂什么情况下需要用到Class类。也曾尝试在自己的代码中强行加入Class输出结果
但感觉不灵活,而且要写的代码明显多了也不便于理解。求大神举例,碾压我的无知!)。C君说大型项目不使用Class调用对象会累死,到底这个“累死”体现在哪里?

首先一个问题,我整个答案里所写的这些代码,不用面向对象这一套能不能实现?

很明显,能。

但是实现的干净么?个人觉得不干净。

项目规格上去后,我们如果按照传统的方式进行开发,务必要多重检查,确保自己不会手抖调用了错误的东西。而 OOP 这一套思想,其实就是通过利用合适的代码结构和封装,某种程度上来讲是减少我们犯错的可能。

同时,现在开发基本都不是一个人的单打独斗,你写的代码可能会被其余人使用与维护。我们有个前提,要假设使用维护你代码的人都是傻逼。我们要适当的封装代码,优化结构,让使用者尽可能的少犯错、

所以最后,无论是各个语言的变量命名规则也好,还是 OOP 这一套范式也好。其本质是在自由度与可读性可维护性之间的一种相对较优的妥协,这种妥协根本的目的就在于通过规范化的操作与封装,减少团队开发维护的成本,优化开发体验。

另外,关于开发这一套还有个老生常谈的问题过度封装。我个人的观点是在你知道什么是 过度封装 之前,你没必要考虑这个问题,按照教科书和开源代码里的结构,去不断封装优化你的代码。

Python中使用class(),面向对象有什么优势相关推荐

  1. python中raise stoplteration_Python面向对象学习笔记3

    装饰器 用于拓展原有函数功能的一种函数 返回函数的函数 在不用更改原函数的代码前提下给函数增加新的功能 @funcname 直接在函数名前加@调用 def log(func): def wrapper ...

  2. python中什么叫类、什么叫对象_python中的类面向对象的基本概念!

    一.概述 今天我们讲述Python中的类&面向对象的基本概念. 首先我们为什么要学习面向对象,我讲一个故事,应该就可以明白了.在古时候,官府衙门如果要颁布什么告示就会去找工匠将命令中的字都雕刻 ...

  3. python中的继承有什么特点_Python中 什么是面向对象-继承和多态

    文字有点长,对于不想看文字的朋友,可以去这里看视频,内容和这个文字一样的,视频可能更好理解 https://www.piqizhu.com/v/zaX9K4pd4GE 上一篇文章<python教 ...

  4. python中并发编程基础1

    并发编程基础概念 1.进程. 什么是进程? 正在运行的程序就是进程.程序只是代码. 什么是多道? 多道技术: 1.空间上的复用(内存).将内存分为几个部分,每个部分放入一个程序,这样同一时间在内存中就 ...

  5. 详解Python中的封装

    文章目录 详解Python中的封装 基础入门 -> setter.getter 进阶使用 -> __ 私有属性 _ 强化加强 -> property 详解Python中的封装 面向对 ...

  6. python中查看关键字需要在python解释器中执行_Day09-python基础之Cpython解释器支持的进程与线程...

    一.进程与线程理论基础 1.背景知识 进程的概念起源于操作系统,是操作系统最核心的概念. 进程是对正在运行程序的一个抽象,操作系统的其他所有内容都是围绕进程的概念展开的.所以想要真正了解进程,必须事先 ...

  7. python中如何创建类的对象_python面向对象中如何建立具体的对象?

    我们现在眼前所能看到的事物,都是具体的对象.很多小伙伴在面向对象中创建对象,其实都停留在对象名称的建立,计算机中并没有具体对象的描述属性.我们想要使用python中的类,建立的对象就需要是具体的.下面 ...

  8. 面向对象和面向过程,python中的类class,python中程序的入口——main方法,

    1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...

  9. 在python中给自己介绍对象笔记--OO面向对象

    面向对象=属性+方法,简称OO=Oject Oriented; list有类,封装,以及多态的特性 class Turtle: # Python 中的类名约定以大写字母开头""&q ...

  10. python中面向对象的缺点_最简单的方法搞懂Python面向对象

    1.面向对象介绍 2.类和对象 3.面向对象基本语法 面向对象与面向过程面向过程:根据业务逻辑从上到下写代码. 面向对象:将变量与函数绑定到一起,分类进行封装,每个程序只要负责分配给自己的分类,这样能 ...

最新文章

  1. poj2109 Power of Cryptography(数学题)
  2. Eclipse安装插件的几种方式
  3. BugkuCTF-MISC题想蹭网先解开密码
  4. 【数据结构与算法】配对堆的Java实现
  5. window命令行大全
  6. [bzoj1031][JSOI2007]字符加密Cipher
  7. 计算机多媒体简历,计算机多媒体简历
  8. 【论文研读】【目标检测】Revisiting Open World Object Detection
  9. linux 词霸,Ubuntu下使用原版金山词霸
  10. 查询不符合条件的数据 mysql
  11. MyBatis中传递多个参数的方法以及传入混合参数的获取方式
  12. python列表两两相减_笨办法学python(二)数值、变量以及运算
  13. matplotlib柱状图上方显示数据_Python基础数据可视化
  14. 【数据分析】滴滴数据分析岗实习经验
  15. wireshark源码分析二
  16. Spring依赖注入IOC(给字段赋值)和Spring测试
  17. CVPR 2021 论文解读I 动态区域感知卷积,进一步提升分类/检测/分割性能|Dynamic Region-Aware Convolution
  18. Charles的下载安装配置大全
  19. zhs16gbk对应mysql_NLS_LANG 数据库字符集中文乱码问题分析和解决
  20. Android之lunch命令

热门文章

  1. S5PV210之Sate210-F DIY硬件,移植uboot,kernel,android 活动现在已经进入实施阶段吗,欢迎广大网友参与 !...
  2. 开放平台_OAuth2.0
  3. 关于域帐户将计算机加入域登陆上限问题
  4. 【修炼1】《序章》关于要写给谁看的问题
  5. ***检测与网络审计产品是孪生兄弟吗?
  6. new ext.toolbar控制按钮间距_按钮规范系列 - 「按钮尺寸」的设计详解
  7. 通过PDF无纸化测试SAP SmartForm打印效果
  8. 让ABAP开发者更加轻松的若干快捷键
  9. CNZZ数据专家使用方法?
  10. SAP内存 和 ABAP内存 的简单介绍说明