首页 > 其他分享 >面向过程(函数)和对象(类)

面向过程(函数)和对象(类)

时间:2024-01-12 21:34:36浏览次数:22  
标签:__ .__ 函数 对象 面向 print 类名 name

【一】面向过程 (函数)

  • 核心在于:过程
  • 过程其实就是将程序流程化
  • 可以说是一条流水线,分步骤的解决问题,先干什么再干什么,分的很清楚

优点

  • 复杂度的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单)

缺点

  • 一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身。

【二】面向对象 (类)

  • 面向过程,核心在于“对象”二字
  • 对象的终极奥义就是将程序 “整合”
  • 对象就是 “容器” ,用来盛放数据与功能

优点

  • 解决了程序的扩展性。
  • 对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

缺点

  • 编程的复杂度远高于面向过程,不了解面向对象而立即上手基于它设计程序,极容易出现过度设计的问题。
    • 一些扩展性要求低的场景使用面向对象会徒增编程难度,比如管理linux系统的shell脚本就不适合用面向对象去设计,面向过程反而更加适合。
  • 无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法准确地预测最终结果。

【三】类与对象

  • 类即类别/种类,是面向对象分析和设计的基石,如果多个对象有相似的数据与功能,那么该多个对象就属于同一种类。
  • 有了类的好处是:
    • 我们可以把同一类对象相同的数据与功能存放到类里,而无需每个对象都重复存一份,这样每个对象里只需存自己独有的数据即可,极大地节省了空间。
  • 所以,如果说对象是用来存放数据与功能的容器,那么类则是用来存放多个对象相同的数据与功能的容器。

img

  • 综上所述,虽然我们是先介绍对象后介绍类,但是需要强调的是:
    • 在程序中,必须要事先定义类,然后再调用类产生对象(调用类拿到的返回值就是对象)。
    • 产生对象的类与对象之间存在关联,这种关联指的是:对象可以访问到类中共有的数据与功能
    • 所以类中的内容仍然是属于对象的,类只不过是一种节省空间、减少代码冗余的机制
  • 面向对象编程最终的核心仍然是去使用对象。

【四】什么是类

  • 类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体

  • 所以,先有鸡和先有蛋的问题就出来了

    • 先有的一个个具体存在的对象(比如一个具体存在的人)
    • 还是先有的人类这个概念,这个问题需要分两种情况去看
  • 在现实世界中:先有对象,再有类

  • 在程序中:务必保证先定义类,后产生对象

【五】类的定义

class People:
    school = '清华大学'

    def __init__(self, name):
        self.name = name

    def read(self):
        print(f'可以读书')

【六】查看和修改类的属性

实例化类得到类对象

a = People('qc')

对象实例.方法

a.read()  # 可以读书

类名.属性 获取到属性的值

print(a.school)  # 清华大学

修改对象的属性

a = People('qc')
a.school = 'ss'
print(a.school)  # 清华大学
a.name = 'cat'
print(a.name)  # cat

【七】类的特殊属性

  • 类名.__name__ :类的名字(字符串)
  • 类名.__doc__:类的文档字符串
  • 类名.__base__:类的第一个父类(在讲继承时会讲)
  • 类名.__bases__:类所有父类构成的元组(在讲继承时会讲)
  • 类名.__dict__:类的字典属性
  • 类名.__module__:类定义所在的模块
  • 类名.__class__:实例对应的类(仅新式类中)
class People:
    '''这是注释'''

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def run(self):
        print(f"{self.name} 跑")


# 类名.__name__:类的名字(字符串)
print(People.__name__)
# People

# 类名.__doc__:类的文档字符串
print(People.__doc__)
# 这是注释

# 类名.__base__:类的第一个父类(继承)
print(People.__base__)
# <class 'object'>

# 类名.__bases__:类所有父类构成的元组(继承)
print(People.__bases__)
# (<class 'object'>,)

# 类名.__dict__:类的字典属性
print(People.__dict__)
# {'__module__': '__main__', '__doc__': '这是注释', '__init__': <function People.__init__ at 0x000001FC78D19B80>, 'run': <function People.run at 0x000001FC78D19C10>, '__dict__': <attribute '__dict__' of 'People' objects>, '__weakref__': <attribute '__weakref__' of 'People' objects>}

# 类名.__module__:类定义所在的模块
print(People.__module__)
# __main__

# 类名.__class__:实例对应的类(仅新式类中)
print(People.__class__)
# <class 'type'>

标签:__,.__,函数,对象,面向,print,类名,name
From: https://www.cnblogs.com/unrealqcc/p/17961645

相关文章

  • mysql8.0窗口函数
    2、新特性1:窗口函数2.1、使用窗口函数前后对比假设我现在有这样一个数据表,它显示了某购物网站在每个城市每个区的销售额:CREATETABLEsales(idINTPRIMARYKEYAUTO_INCREMENT,cityVARCHAR(15),countyVARCHAR(15),sales_valueDECIMAL);INSERTINTOsales(city,county......
  • Python使用Matplotlib包绘制x方的积分函数图像
    Matplotlib是一个常用的Python绘图库,可以用于创建各种类型的图表和可视化。本文将介绍如何使用Matplotlib包在Python中绘制x方的积分函数图像。步骤:以下是使用Matplotlib包绘制x方的积分函数图像的步骤:1.导入所需的库。2.定义要绘制的函数。3.创建一个表示x轴范围的数组。4.计算函......
  • main函数是否需要返回值0的讨论
    在C和C++编程中,程序的入口点通常是main函数。对于main函数,是否需要使用return语句返回值0一直存在争议。本文将探讨main函数是否需要返回值0,并解释不同的观点和其影响。1.返回值0的作用在C和C++中,main函数的返回值表示程序的执行状态。返回值0通常表示程序成功执行并正常终止。因此......
  • python-函数进阶:函数返回多个返回值,lambda匿名函数
    如果一个函数要有多个返回值,要怎么书写呢?deftest_return():return1,2x,y= test_return()按照返回值的顺序,写对应顺序的多个变量接收即可变量之间用逗号隔开支持不同数据类型的return  匿名函数匿名函数使用lambda关键字进行定义定义语法:lambda传入参数:函数......
  • js-内置对象
    早期的浏览器开发商认为使用JavaScript动态生成HTML标签是一个需求。因此,早期浏览器扩展了规范,增加了辅助生成HTML标签的方法。下表总结了这些HTML方法。不过,这些方法基本上已经没有人使用了,因为结果通常不是语义化的标记。anchor(name)<aname="name">string</a>big()......
  • js Global 对象属性
    Global对象有很多属性,其中一些前面已经提到过了。像undefined、NaN和Infinity等特殊值都是Global对象的属性。此外,所有原生引用类型构造函数,比如Object和Function,也都是Global对象的属性。undefinedNaNInfinityObjectArrayFunctionBooleanString特殊值undefi......
  • java基础语法面向对象之单个对象内存图
    一:概述在面向对象的学习中,需要去了解对象的内存图,在这里以单个对象的内存图为例进行讲解。二:具体说明<1>代码publicclassStudent{Stringname;intage;publicvoidstudy(){System.out.println(name+"好好学习");......
  • 无涯教程-Redis - TIME 命令函数
    RedisTIME命令以两个项目列表的形式返回当前服务器时间-一个Unix时间戳和在当前秒中已经经过的微秒数。TIME-返回值包含两个元素-当前时间(以UNIX时间戳格式表示),以秒为单位。当前这一秒钟已经逝去的微秒数。TIME-语法以下是RedisTIME命令的基本语法。redi......
  • 无涯教程-Redis - SYNC 命令函数
    RedisSYNC命令用于将从站同步到主站。SYNC-返回值返回字符串内容。SYNC-语法以下是RedisSYNC命令的基本语法。redis127.0.0.1:6379>SYNCSYNC-示例redis127.0.0.1:6379>SYNCEnteringslaveoutputmode...(pressCtrl-Ctoquit)SYNCwithmaster,......
  • 友元函数与运算符重载
    友元函数友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。友元函数是一个不属于类成员的函数,但它可以访问该......