今日内容详细
面向过程编程
什么是面向过程?
面向过程就是在我们编写功能的时候,把每一步需要做的事情逐一写出来
ps:
比如:我们要去接一杯水
1.拿起杯子,下一步就要想去哪接水
2.比如厨房,比如饮水机
3.接完水之后干什么
生活中很多的例子都是面向过程的
优点:复杂的问题简单化,进而流程化
缺点:扩展性差,牵一发而动全身
应用场景:一般用在对扩展性要求比较差的情况
使用面向过程写一个注册的案例来体会面向过程的优缺点:
1.先让用户输入用户名和密码
2.验证参数
3.直接把数据写入文件中
def register():
username=input(':').strip()
password=input(':').strip()
email=input(':').strip()
return {
'name':username,
'pwd':password,
'email':email,
}
def verify_len6(userinfo):
flag=True
if len(userinfo['name']) != 5:
print('err')
flag=False
if len(userinfo['pwd']) !=5:
print('err')
flag=False
if len(userinfo['email']) !=5:
print('err')
flag=False
return {
'flag':flag,
'userinfo':userinfo,
}
def write_date(data):
if data['flag']:
with open('userinfo.txt','w',encoding='utf-8') as w1:
import json
json.dump(data['userinfo'],w1)
userinfo=register()
data=verify_len6(userinfo)
data=write_date(data)
面向对象编程
一种认识世界,分析世界的方法论,将万事万物抽象为各种对象
面向对象它是一种编程的思想,不是一门新得技术栈
面向对象中对象是核心,必须搞明白什么是对象
'''在Python中一切皆对象'''
对象是什么?
在生活中:
对象就是'特征'与'技能'的结合体
在程序中:
对象就是盛放'数据属性'和'功能'的容器
优点:扩展性强
缺点:简单的问题复杂化了
举例:
系统中有哪些角色:
学生,老师,管理员,选课功能...
版本一:
'''
学生选课系统,有哪些内容比如
学生姓名,学生年龄,学生性别,选的什么课
'''
def choice_course(stu_name,courses):
stu_name['course'].append(courses)
print(stu_name['course'])
stu_name={
'name':'matu',
'age':18,
'course':[],
'func':choice_course,
}
stu1_dict={
'name':'matu',
'age':18,
'course':[],
'func':choice_course,
}
stu_name.get('func')(stu_name,'python')
stu1_dict['func'](stu1_dict,'linux')
'''必须先定义类,然后调用类,再产生对象'''
'''谁调用函数,就把谁当作参数传进去'''
类的定义和对象的产生
对象:是特征与功能的结合体
'''站在不同的角度,分出来的类不一样'''
类:一系列相似的特征和相似的技能的结合体
到底是先有对象还是先有类?
1.生活中
先有人,在有人类,那就是先有对象,在有类
2.程序中
'''一定是先有类,然后调用类,产生对象'''
定义类语法:
Class 变量名():
pass
1.关键字是否Class来声明
2.Class后面写的是类名,类名的命名:一般情况下遵循变量的命名规范即可,类名一般首字母都要大写,(小写也行,但是不推荐)
3.如果你的类名比较长,推荐使用驼峰法,并且是大驼峰
4.类名后面的小括号不能省略
class func():
country='china'
position='sh'
def test_func(self):
print(func.country)
'''
#定义类发生了哪些事情?
1.类一旦定义完成,会立马执行类体代码
2.会产生类的名称空间,其实就是一个大字典,然后把类中的名字都丢到类的名称空间去
3.把类的名称空间绑定给类名__dict__中
'''
print(func.__dict__)
s1=func()
print(s1)
print(s1.__dict__)
定制对象自己独有的属性
默认情况下,调用一个类产生一个对象,它是一个空对象,没有任何的数据
class Student():
'''它有特殊的含义,在类里面必须叫__init__,然后调用类的时候自动触发执行
类里面不一定有__init__方法,如果需要提前定制对象的属性,就写这个init方法
'''
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def choice_course(self):
print(self.name)
stu1 = Student()
'''我们需要给空对象定制自己独有的属性
一般情况下,双下划线开头的属性,方法等都不推荐使用
'''
stu1.__dict__['name']='kevin'
'''我们推荐下面的点语法'''
stu1.name='kevin'
stu1.age=20
stu1.gender='male'
print(stu1.choice_course())
print(stu1.__dict__)
stu2=Student()
print(stu2.__dict__)
class Person():
school = 'sh'
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def choice_course(self):
print(self.name)
stu = Person('kevin',19, 'male')
stu.choice_course()
属性的查找顺序
有类属性,对象自己的属性
1.显示类属性的增删改查
class Person():
school = 'sh'
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def choice_course(self):
print(self.name)
stu = Person('kevin',19, 'male')
print(Person.__dict__['school'])
Person.x=666
Person.school='China'
del Person.school
print(Person.school)
2.对象属性的增删改查
class Person():
school = 'sh'
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def choice_course(self):
print(self.name)
stu = Person('kevin',19, 'male')
print(stu.name)
print(stu.age)
print(stu.gender)
stu.x=666
print(stu.x)
stu.x=888
print(stu.x)
del stu.x
print(stu.x)
课堂练习
定义一个类,产生一堆对象,然后定义一个计数器,记录产生了多少个对象
class Person():
count=0
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
Person.count+=1
stu = Person('kevin',19, 'male')
stu1=Person('jerry',10,'male')
stu2=Person('mali',30,'female')
stu3=Person('tanl',25,'male')
print(stu.count)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)