首页 > 编程语言 >面向过程编程 和 面向对象编程

面向过程编程 和 面向对象编程

时间:2023-10-07 16:44:06浏览次数:34  
标签:__ Student self 编程 course dict 面向 面向对象编程 name

1. 什么是面向过程变成?

首先,在编程中,面向过程和面向对象是编程的两大编程思想,分别是:面向过程和面向对象,二不是一门新的技术栈.

面向过程中核心是过程二字,过程就是先干什么、在干什么、最后干什么,就是机械式的思维方式

优点:复杂的问题简单化、进而流程化
缺点:扩展性差,牵一发而动全身
应用场景: 一般用在对扩展性要求比较差的情况

使用面向过程写一个注册的案例来体会面向过程的优缺点、
1. 先让用户输入用户名和密码
2. 验证参数
3. 直接把数据写入文件中

2. 面向对象编程

面向对象它也是一种编程的思想,不是一门新的技术栈

面向对象中对象是核心,必须搞明白什么是对象
    """在Python中一切皆对象!"""

对象是什么?
    在生活中:
        对象就是'特征'与'技能'的集合体
     在程序中:
        对象就是盛放'数据属性'和'功能'的容器
        
优点:扩展性强
缺点:简单的问题复杂化了

3. 类的定义和对象产生

"""
1. 关键字使用class来声明
2. class后面写的是类名,类名的命名:一般情况下遵循变量的命名规范即可,类名一般首字母都要大写,(小写也行,但是不推荐)
3. 如果你的类名比较长,推荐使用驼峰法,并且是大驼峰
4. 类名后面的小括号不能省略
"""

# 类名
class Student():

    school = 'ShangHai'  # 这是属性 类的属性

    def __init__(self,name,age,gender): # 这是初始化方法 self是调用的对象 会把调用的对象直接传过来
        self.name = name                # self.name 是一个字典的 key值 后面的name是传进来的values值
        self.age = age
        self.gender = gender


    def choose_course(self, course):   # 这个是自定义的方法
        print("%s选课成功:%s" % (self.name,course))

# 如何查看类的名称空间?
print(Student.__dict__)

# 如何查看对象的名称空间
print(stu.__dict__) # {} 默认情况下调用类会得到一个空对象,其实就是一个空字典

"""调用类的过程也是实例化的过程,得到的对象也称为是一个实例"""

stu = Student('huang','18','male',)  # 调用类产生一个对象 是一个字典 可以产生多个对象
stu.choose_course('python')         # 对象再调用类里面的方法

"""
定义类发生了哪些事情?
1. 类一旦定义完成,会立马执行类体代码
2. 会产生类的名称空间,其实就是一个大字典,然后把类中得名字都丢到类的名称空间去
3. 把类的名称空间绑定给 类名.__dict__中
"""


class Student():
school = 'SH' # 类属性,其实就是变量吗?

"""它有特殊的含义, 在类里面必须叫__init__,然后调用类的时候才会自动触发执行"""

## 类里面一定要有这个方法吗? 不一定,也就是说,你如果需要提前定制对象的属性,你就写这个方法, 如果不需要,就不用写
def __init__(self, name, age, gender, course=None):
if course is None:
course = []
self.name = name # stu.__dict__['name'] = 'kevin'
self.age = age # stu.__dict__['age'] = 18
self.gender = gender # stu.__dict__['gender'] = 'male'
self.courses = course # stu.__dict__['courses'] = []

## 函数写在类里面就称为是方法
def choose_course(stu_dict, course):
stu_dict.__dict__['courses'].append(course)
print("%s选课成功:%s" % (stu_dict.__dict__['name'], stu_dict.__dict__['courses']))

### 版本2
"""在调用类的时候,会自定调用类里面的__init__方法"""

"""调用类的时候有特殊的功能,它会把对象自己当成第一个参数传给__init__方法"""
stu = Student('kevin', 19, 'male',) # stu = Student(stu, 'kevin', 19, 'male')
stu.choose_course('python')
stu.choose_course('linux')

4. 属性的查找顺序

# 类只能从类中查找 而不能从方法中查找
class Student():
    school = 'ShangHai'

print(Student.school)   # 查属性 查不到会报错
# print(Student.schoolsdadas)   # 查不到会报错
Student.school = 'qinghua'  # 修改属性
print(Student.__dict__)

Student.xxx = 'xxx'  # 如果有属性名字就修改 没有就增加

del Student.school   # 删除属性

# 方法的属性查找
class Student():
    school = 'ShangHai'

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

    def choose_course(self, course):  # 这个是自定义的方法
        print("%s选课成功:%s" % (self.name,course))

obj = Student('huang',18,'male')

print(obj.name)  # 方法的 查
print(obj.school)   # 先从方法里面找 找不到去类中查找 只限定于 . 方法 
print(obj.__dict__['school'])  # 字典的方式查找只能找到自己的名称空间 而查不到类的名称空间  每个对象都有自己的名称空间

obj.name = 'aaa'  # 修改原有的  obj.name = 'huang'

obj.hobby = []   # 增加一个方法属性

del obj.hobby # 删除一个方法属性

5. 练习题 对类名称空间的掌控

# 定义一个类,产生一堆对象,然后定义一个计数器,记录产生了多少个对象

class Student():
    cshool = 'ShangHai'

    count = 0
    def __init__(self,name,age):
        self.name = name
        self.age = age
        Student.count += 1  # 必须要用类来调用 不然只能统计调用方法的那个对象
        
obj = Student('huang',18)
obj1 = Student('huang1',18)
obj2 = Student('huang2',18)
obj3 = Student('huang3',18)

print(Student.count)

 

标签:__,Student,self,编程,course,dict,面向,面向对象编程,name
From: https://www.cnblogs.com/lchengshao/p/17746663.html

相关文章

  • lesson9 简易计算器-2 面向对象的属性和方法写法
     packagecom.zym.lesson9;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;publicclassTestCalc2{publicsta......
  • 安装包Matlab-中文科学编程软件-安装包下载方式
    Matlab应用是从外网软件论坛中引进的一款优质数据分析平台,该应用的UI布局设计参考了主流的办公应用,主体是由MATLAB和Simulink组成,内置了多达六百余种的函数运算模式,适合于每天需要处理大规模数据计算的行业,像仿真建模、系统算法的研发以及复杂的工程结构作图等,相信会是满意的选择。......
  • matlab下载-matlab软件官方版下载「编程开发」安装包下载方式
    matlab最新版本是一款非常不错的数学计算软件,这款软件非常的给力有着很强悍的算法以及模型创建能力,此版本更新了很多新的功能,能让你的办公使用更加强悍,快来下载试试吧。软件地址:看置顶贴Matlab2020b软件特色1、Matlab2020b提供用于科学计算及工程设计的高级语言。2、Matlab2020b可......
  • 要体验 AI 编程助手吗?
    能不能用AI编程辅助写代码?亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请......
  • GPU通用计算编程模型
    这是我阅读General-PurposeGraphicsProcessorArchitecture的一篇笔记,本文对应书中第二章的内容。执行模型现代GPU普遍采用SIMD来实现数据级(data-level)并行,程序员通过诸如CUDA等API以在GPU上启动一系列的线程(thread)执行工作。其中,每个线程可以有独立的执行路径(executionpath),......
  • 详解PLC常用的编程语言
    大家都知道学习某种新知识,技巧跟方法是关键的。正如新手刚开始接触PLC,它的软件编程语言与一般计算机语言相比,具有明显的特点,它既不同于高级语言,也不同于一般的汇编语言,它既要满足易于编写又要满足易于调试的要求。早期的PLC仅支持梯形图编程语言和指令表编程语言,现根据国际电工委......
  • 面向对象的三个基本特征:封装、继承、多态
    封装在面向对象编程中,封装是一种将数据和相关操作封装在一个单元内部的概念。它通过将数据和方法组合在一个类中,隐藏了内部实现的细节,只暴露了必要的接口给外部使用。封装的目的是保护数据的完整性和安全性,同时提供一个清晰的接口供其他对象进行交互。通过封装,我们可以实现数据......
  • 多线程编程
    多线程编程与资源同步1.基础  进程:一个进程代表计算机中实际运行的一个程序,在现代计算机操作系统的保护模式下,每个进程都具有自己独立的进程地址空间和上下文堆栈;进程并不负责执行进程代码,只是为程序提供一个大环境容器,进程中的实际执行体是线程(Thread),因此在一个进程中至......
  • 十四天学会C++之第四天(面向对象编程基础)
    类和对象是什么?在C++中,类是一种用户定义的数据类型,它可以包含数据成员(也就是属性)和成员函数(也就是方法)。类是一种模板或蓝图,用于创建具体的对象。对象是类的实例,它是根据类的定义创建的,可以用来表示现实世界中的各种事物。对象具有类定义的属性和行为。面向对象编程思想面向对象编......
  • Python异步编程并发比较之循环、进程、线程、协程
    服务端现在有一个api接口http://127.0.0.1:18081/hello批量请求该接口,该接口中有一个5s的阻塞。使用循环,多进程,多线程,协程等四种方式,一共请求10次,比较总的请求耗时。importtimefromflaskimportFlaskapp=Flask(__name__)@app.route('/hello')defhello_world():......